#include<iostream> #include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #include<algorithm> #include<map> #include<vector> #include<queue> using namespace std; 求N个字符串公共后缀,先都反转再遍历 tips:注意不要刚好开256大小,不够,开到300好了,char数组最后一个是存/0的!!! int n,minLen=300,ans=0; char s[100][300]; //至多100个字符串,每个字符串至多256个字符 int main(){ scanf("%d",&n); //n是字符串个数 getchar(); //接收换行符 for(int i=0;i<n;i++){ cin.getline( s[i],300 ); //算笔上是gets,此处注意下格式 int len=strlen(s[i]); if(len < minLen) minLen =len; //取最小长度 for(int j=0; j<len/2; j++){ //反转字符串s[i],转化为求公共前缀 char temp=s[i][j]; //交换str[i]与str[len-i-1] s[i][j]=s[i][ len-j-1 ]; s[i][ len-j-1 ]=temp; } } for(int i=0; i<minLen ;i++){ //判断所有字符串的第i个字符是否全部相等 char c=s[0][i]; //取第一个字符串的第i个字符 bool same=true; for(int j=1;j<n;j++){ //判断其余字符串中的第i个字符是否等于c if(c != s[j][i] ){ //只要有一个不相等,就停止枚举,说明公共前缀到此为止 same=false; break; } } if(same) ans++; //若所有字符串中的第i位相等,则计数器ans加1 else break; } if(ans){ for(int i=ans-1;i>=0;i--){ printf("%c", s[0][i] ); } }else { printf("nai"); //不存在公共前缀 } system("pause"); return 0; }