题意:给定n个字符串,然后求这些字符串相同后缀的长度
思路:如果从每个字符串的结尾开始遍历的话,太过于复杂,将每个字符串逆置,然后与后面逆置的字符串从头开始比较,起点是0就比较容易,当输入一个字符串时,就与ans字符串比较,把相同的ans中的字符截取下来后赋值给ans,不用存储。当然可以直接存储之后,把所有的字符最短长度求出来,依次遍历每两个字符串,判断其每个字符是否相同,相同用ans连接起来。
代码:
#include<iostream>
#include<algorithm>
#include<math.h>
#include<string>
using namespace std;
int main() {
int n = 0;
cin >> n;
getchar();//前面吸收换行
string ans;
for (int i = 0; i < n; i++) {
string s;
getline(cin, s);
reverse(s.begin(),s.end());
if (i == 0) {
ans = s;
continue;
}
else {
int minlen = min(s.length(),ans.length());
for (int j = 0; j < minlen; j++) {
if (s[j] != ans[j]) {
ans = ans.substr(0,j);
break;
}
}
}
}
reverse(ans.begin(),ans.end());
if(!ans.empty())cout << ans << endl;
else cout << "nai" << endl;
system("pause");
return 0;
}