close
Content
一看題名,你就該知道,這次跟迴文脫不了關係!
若你不確定什麼是「迴文」,請看 Google 字典的解釋:
迴文 huíwén
一種修辭方式。
通過詞語反復迴環使用,表達二者互相依存或彼此制約的關係,
如“人人為我,我為人人”、“饒人不癡漢,癡漢不饒人”。
Input
一筆測試資料一行,包含許許多多但總數不超過 1000 個的大小寫英文字母和標點符號。
不可思議的是,裡面不會有任何空白字元。
Output
如果重新安排順序後,有辦法讓這一堆英文字母變成迴文的話,輸出「yes !」,否則輸出「no...」。
注意,大寫和小寫字母視為相同,即 A 和 a 是一樣的,並且,請忽視所有非英文字母的字元。
Sample Input #1
ababa bbaaa Level aaabbbcc abcdefg HowAreYouToday A_man,_a_plan,_a_canal:_Panama.
Sample Output #1
yes ! yes ! yes ! no... no... no... yes !
Python
#data=input() data='A_man,_a_plan,_a_canal:_Panama.' data="".join(filter(str.isalpha, data)) #只保留字母(現用在字串型態) ascii=[0]*26 #"".join(filter(str.isalnum, "Colour Temperature is 2700 Kelvin")) #只保留数字和字母 #"".join(filter(str.isdigit, "Colour Temperature is 2700 Kelvin")) #只保留数字,中间有小数点请使用正则表达式 flag=0 data=list(data.upper()) #將字串轉大寫,然後再轉list ''' 我這裡得想法是,我開一個list,放置A-z,出現就將該櫃子+=1, 去計算每個字母出現的數量,這裡我是用ASCII碼去放櫃子 ''' for i in data: ascii[ord(i)-65]+=1 #數字=ord('字串') #字串=chr(數字) for j in ascii: if j%2==1: flag+=1 ''' 這邊去計算每一個櫃子的數量,只有一個櫃子的的數量可以為奇數 ''' if flag>1: print(yes !) else: print(no...)
C++
//思考方式 //利用string[]可以直接轉成ascii //用ascii判斷是否是英文字 //a~z 97~122 //A~Z 65~90 //迴文中最多只能有一個字出現奇數次 //其他都只能出現偶數次 #include <iostream> #include <string> using namespace std; int main() { string istr1; //輸入測資 while(cin>>istr1) { //用陣列來計數 int count[26]={0}; //一個字一個字判斷出現幾個英文字 for(int i =0;i<istr1.length();i++) { //97~122是小寫的範圍 if(97<=istr1[i]&&istr1[i]<=122) { //count[0]表示 a 以此類推 //istr1[i]-'a'表示該字母的ascii減a的ascii count[istr1[i]-'a']+=1; } //65~98是大寫的範圍 if(65<=istr1[i]&&istr1[i]<=90) { count[istr1[i]-'A']+=1; } } int odd=0; //判斷字母出現奇數次還是偶數次 for(int i=0;i<26;i++) { if(count[i]%2!=0) { odd++; if(odd==2) { break; } } } //輸出 if(odd<2) { cout<<"yes !"<<endl; } else { cout<<"no..."<<endl; } } return 0; }
文章標籤
全站熱搜