1
题目大意:

给定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接受到。

提交结果:

截屏2020-10-10 上午10.57.15.png

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;
}

乔梓鑫
569 声望17 粉丝

主要分享个人学习经验和心得