返回目录
题意
输入n个字符串,求最大公共后缀
注意点
- 这几篇代码不同以前的代码了,因为更加使用了C++代码风格和STL库,这样的代码写起来更加方便,之前不用是想更加熟悉C风格代码
- 这里开始陆续对代码中使用了C++代码风格和STL库的地方做讲解
- cin>>为输入,cout<<为输出,如果大量使用输入输出请用printf和scanf
- getchar()用来吸收换行符‘\n’,如果不吸收掉程序可能输入异常或异常退出
- string类型是STL库里的一个很方便处理字符串的工具,其他常用的还有map,vector等
- getline(cin,str)用来输入一行字符串,包括空格,本题不能用scanf()输入,因为scanf()会将空格当做结束标志符
- 假设声明string类型str,则str.begin()会返回字符串开头指针,str.end()会返回字符串j结束指针
- reverse()是STL自带的函数,可以对vector,string等类型做翻转,参数为起始指针和结束指针
- string类型无法匹配%s,需要用ans.c_str(),转换成C风格代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int N,len=300;
scanf("%d",&N);
getchar();
string input[N],ans="";
for(int i=0;i<N;i++){
getline(cin,input[i]);
len=min(len,(int)input[i].size());
reverse(input[i].begin(),input[i].end());
}
bool flag=true;
for(int i=0;i<len;i++){
for(int j=1;j<N;++j)
if(input[j][i]!=input[j-1][i])
flag=false;
if(!flag)break;
ans+=input[0][i];
}
reverse(ans.begin(),ans.end());
if(ans=="")printf("nai");
else printf("%s",ans.c_str());
return 0;
}