• A. Many Equal Substrings(思维)


    传送门

      写这题顺便学了下string类里substr的用法substr有2个参数,第一个参数为你需要截取的子串的起始位置的索引(下标),第二个参数为从起始位置开始截取的长度。

      这题就用到了substr函数,这题首先要分2种情况,一种是t串里不含相同的前缀后缀时,s串里有多少个t串,就输出多少次t串就可以了,这样可以保证是最短的,第二种就是有相同前缀后缀,那就把最大的相同前缀后缀的长度求出来,每次输出t串时就不必整个t串都输出了,因为t串具有相同前缀后缀这个性质,前面一个输出的t串的后缀就可以作为当前输出的t串的前缀,这样子就可以保证是最短的。

    #include<bits/stdc++.h>
    using namespace std;
    string s;
    int n,ti,nxt[55];
    int main()
    {
        scanf("%d %d",&n,&ti);
        cin>>s;
        nxt[0]=0;
        for(int i=1,k=0;i<n;i++)
        {
            while(k>0&&s[i]!=s[k])
                k=nxt[k-1];
            if(s[i]==s[k])
                k++;
            nxt[i]=k;
        }
        if(nxt[n-1]==0)
        {
            while(ti--)
                cout<<s;
            cout<<endl;
            return 0;
        }
        string p=s.substr(nxt[n-1],n-nxt[n-1]);
        cout<<s;
        for(int i=2;i<=ti;i++)
        {
            cout<<p;
        }
        cout<<endl;
        return 0;
    }
    
  • 相关阅读:
    SVN 的基本用法
    Git的基本用法
    一般情况下设计应遵循的原则
    设置默认以管理员运行的WinForm
    为 dll (类库) 解决方案添加测试项目
    C# WinForms跨线程更新 UI
    Android 创建 SO 文件
    SQL之case when then用法
    SQL LIKE 通配符随笔
    document.all.item作用
  • 原文地址:https://www.cnblogs.com/eason9906/p/11754875.html
Copyright © 2020-2023  润新知