少年 DXH
- 描述
- 大家都知道,DXH 幼時性格怪癖,小朋友都不喜歡和他玩,這種情況一直到 DXH 的少年時期也沒有改變。
少年時期的 DXH 迷上了"迴文串",“迴文串”是指正着讀倒着讀都一樣的字符串。DXH一個人的時候喜歡在地上隨便寫一個字符串 S,然後在這個字符串的右邊添加儘量少的字符(可以不添加,就是 0 個),使得這個字符串變成“迴文串”。但玩的時間長了,DXH 的手也酸了,聰明的你能幫他寫一個程序,算出這個添加最少字符形成的迴文串嗎?
一個字符串 S[1..L]被稱爲迴文串,當且僅當 S[i] = S[L - i + 1] (1 <= i <= L)。- 輸入
- 第一行,一個 T (T <= 100),表示有 T 個字符串需要你判斷
之後 T 行,每行一個字符串 S。
S 的長度|S|滿足 1 <= |S| <= 50,且 S 只由小寫字母'a' -'z'組成。 - 輸出
- 對於每個字符串,輸出一行,每行一個字符串 S', 是在 S 右側添加最少的字符形成的迴文串。
- 樣例輸入
-
5 add cigartragic dxhisgirl acaba abczyxyz
- 樣例輸出
-
adda cigartragic dxhisgirlrigsihxd acabaca
abczyxyzcba
-
-
就拿樣例 acabaca 舉例吧
-
acabaca_ _ _ ......
-
_ _ _ .....acabaca
-
經過分析可知,當原來的字符串從任意位置到最後一個位置並且經過反轉的字符串從第一個到任意一個一一對應時
-
經過反轉的字符串剩下的字符即爲答案
-
#include <map> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define INF 0x3f3f3f using namespace std; char s1[55]; char s2[55]; int main(){ int i,j,k,t,f,len,flag; scanf("%d",&t); while(t--){ scanf("%s",s1); len=strlen(s1); for(i=0,j=len-1;i<len;i++,j--) s2[j]=s1[i]; for(i=0;i<len;i++){ k=i; for(j=0;j<len;j++){ if(s1[k]==s2[j]) k++; else break; } if(k==len){ f=j; break; } } printf("%s",s1); for(i=f;i<len;i++) printf("%c",s2[i]); printf("\n"); } return 0; }