zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    面向对象的分析与设计
    Django的ORM补充
    JDBC数据库连接池
    Python 中的深浅拷贝
    智能机系统分析
    hyperf框架学习
    HTTP协议知识
    百度知道有关php抓取问题
    awk之FS的指定
    从DELPHI到JAVA[delphi]
  • 原文地址:https://www.cnblogs.com/eason9906/p/11754875.html
Copyright © 2011-2022 走看看