A1077. Kuchiguse
The Japanese language is notorious for its sentence ending particles. Personal preference of such particles can be considered as a reflection of the speaker's personality. Such a preference is called "Kuchiguse" and is often exaggerated artistically in Anime and Manga. For example, the artificial sentence ending particle "nyan~" is often used as a stereotype for characters with a cat-like personality:
- Itai nyan~ (It hurts, nyan~)
- Ninjin wa iyada nyan~ (I hate carrots, nyan~)
Now given a few lines spoken by the same character, can you find her Kuchiguse?
Input Specification:
Each input file contains one test case. For each case, the first line is an integer N (2<=N<=100). Following are N file lines of 0~256 (inclusive) characters in length, each representing a character's spoken line. The spoken lines are case sensitive.
Output Specification:
For each test case, print in one line the kuchiguse of the character, i.e., the longest common suffix of all N lines. If there is no such suffix, write "nai".
Sample Input 1:
3 Itai nyan~ Ninjin wa iyadanyan~ uhhh nyan~
Sample Output 1:
nyan~
Sample Input 2:
3 Itai! Ninjinnwaiyada T_T T_T
Sample Output 2:
nai
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<string.h> 5 using namespace std; 6 void rev(char a[]){ 7 int len = strlen(a); 8 for(int i = 0; i < len / 2; i++) 9 swap(a[i],a[len - 1 - i]); 10 } 11 int main(){ 12 int N, minL = 99999, tag = 1, len = 0; 13 char str[100][1000], sen[1000]; 14 scanf("%d", &N); 15 getchar(); 16 for(int i = 0; i < N; i++){ 17 gets(str[i]); 18 rev(str[i]); 19 if(minL > strlen(str[i])) 20 minL = strlen(str[i]); 21 } 22 for(int i = 0; i < minL; i++){ 23 char c = str[0][i]; 24 for(int j = 0; j < N; j++) 25 if(str[j][i] != c){ 26 tag = 0; 27 break; 28 } 29 if(tag == 0) 30 break; 31 len++; 32 } 33 if(len != 0) 34 for(int j = len - 1; j >= 0; j--) 35 printf("%c", str[0][j]); 36 else 37 printf("nai"); 38 cin >> N; 39 return 0; 40 }
总结:
1、本题即求公共后缀,由于每个字符串长度不一,可以在输入字符串后逆序,转换为求公共前缀。
2、关于字符串的处理,本题无法使用scanf的%s读入字符串,因为字符串中存在空格。所以可以用gets(),在遇到回车时结束。但要注意,在scanf读入N后,还存在一个回车键,需要被吸收掉,否则会导致gets()读到一个回车空串。
3、由于PAT不支持gets()读入带空格的一行。以后遇到复杂的字符串题时,使用string而不是char[]。