求hack
查看原帖
求hack
681120
LMS_yr楼主2023/2/27 20:17

也是最后一个点过不了,但不是回文的问题,我试了几个还是找不到问题,用的双指针找到最短循环

#include<iostream>
#include<cstring>

using namespace std;

int main()
{
    int m;
    string s1,smap;
    cin>>m>>s1;
    s1=' '+s1;
    int la = 1,idx = 1; 
    // la表示循环节smap的元素个数
    if(m==2){
        cout<<"1";
        return 0;
    }
    smap = s1.substr(0,2);
    for(int i=2;i<=m;i++)
    {
        if(s1[i]!=smap[idx]&&s1[i]!=s1[1]) {
            idx = 1;
            la = i;
            smap = s1.substr(0,i+1);
        }
        else if(s1[i]!=smap[idx]){
            idx = 2;
            la = i-1;
            smap = s1.substr(0,i);
        }
        else{
            if(idx == la) idx = 1 ;
            else idx++;
        }
    }
    int x = smap.size();
    cout<<x-1;
    return 0;
    
}
2023/2/27 20:17
加载中...