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
题意:输入字符串,找出字符串的最长公共后缀并输出,无则输出nai
。
思路:题目要求的时最长公共后缀,因比较是从后往前较易,所以在输入时就将该字符串反转,每个字符串进行逐字对比(上界为最短字符串的长度),当字符串有一个位置pos
的元素与第一个输入的字符串不同时即刻break
就能得到最长公共后缀,最后反向输出即可;
题目不难,但是有个巨坑。输入的字符串可以含空格,得用gets()
,一开始用scanf卡了好久才意识到这个问题,但PAT平台上用不了gets()
,只好疯狂找替代品,最后找到了getline(cin,str[])
,而且输入N后要用getchar
把换行符吸收掉才行!
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int main()
{
bool flag = false;
int n,pos,len = 300;
string str[101];
scanf("%d",&n);
getchar();
for(int i = 0 ; i < n ; i++){
getline(cin,str[i]);
reverse(str[i].begin(),str[i].end());
if(len>str[i].length()) len = str[i].length();
}
for(pos = 0; pos < len ;pos++){
for(int i = 1 ; i < n ; i++){
if(str[i][pos] != str[0][pos]){
flag = true;
break;
}
}
if(flag) break;
}
if(pos == 0) printf("nai");
else{
for(int i = pos-1; i >= 0; i--){
printf("%c",str[0][i]);
}
}
return 0;
}