题目粗心:
给定N个字符串,求它们的公共后缀,如果没有就输入nai
算法思路:
求字符串的公共后缀就得想到从后往前进行遍历雷同的字符了,为此应用n记录三个字符串的最小长度,作为遍历的最大长度,而后应用i,j,k别离作为s1,s2,s3的下标指针,只有s1[i]==s2[j]&&s1[i]==s3[k]就阐明以后字符为公共字符,增加到后果字符串r中,而后–i,–j,–k,否则就间接break退出循环。退出循环后,间接逆置字符串r,如果r为空阐明没有公共后缀,输入nai,否则就输入r即可。
留神点:
这里的输出字符串得用getline承受一行,cin遇到空格就进行输出了,同时在输出N后得用getchar()承受回车,防止被前面的getline承受到。
提交后果:
AC代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int N;
cin>>N;
getchar();// 承受回车
string s1,s2,s3;
getline(cin,s1);
getline(cin,s2);
getline(cin,s3);
int n = min(min(s1.size(),s2.size()),s3.size());
int i = s1.size()-1,j=s2.size()-1,k=s3.size()-1;//s1,s2,s3的下标指针
string r;
for (int l = 0; l < n; ++l) {
if(s1[i]==s2[j]&&s1[i]==s3[k]){
r += s1[i];
--i;
--j;
--k;
} else{
break;
}
}
reverse(r.begin(),r.end());
if(r.empty()){
cout<<"nai";
} else{
cout<<r;
}
return 0;
}
发表回复