这道题我觉得最关键的就是能看懂题,好好学英语很重要,大概意思就是让你找到下面这些字符串最大的公共后缀
大概思路就是先把每个字符串读进来然后翻转,最大公共后缀就变成了最大公共前缀这就简单很多了,读进去的时候顺便把最小字符串长度min找到,最大的公共后缀的长度最大就是min,然后从下标为0开始判断当前字符是否都相等,相等就加到ans里,不相等就出来,最后把ans翻转过来,如果ans的字符数量为0就输出"nai"否则直接把ans打出来
代码如下
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string str[105];
int N,min=0x3f3f3f3f;//找到下列字符串最短的那个的长度
string ans;
cin>>N;
cin.get();
for(int i=0;i<N;i++){
getline(cin,str[i]);
if(str[i].size()<min)
min=str[i].size();
reverse(str[i].begin(),str[i].end());//把字符串翻转过来更容易输出来最长后缀
}
int flag=true;//判断是否出现不相等的了
for(int i=0;i<min;i++){//从下标i开始遍历每个字符串
char ch=str[0][i];
for(int j=1;j<N;j++){
if(str[j][i]!=ch){
flag=false;
break;
}
}
if(!flag)
break;
else{
ans.push_back(ch);
}
}
if(ans.size()==0)
cout<<ans<<"nai"<<endl;
else{
reverse(ans.begin(),ans.end());
cout<<ans<<endl;
}
return 0;
}