zoukankan      html  css  js  c++  java
  • SSLZYC 2575 给出字符串

    题目大意:
    给出一个由小写字母组成的字符串。你的任务是找出其最长的出现至少两次的子串的长度。


    思路:
    纯模拟。
    这道题我用的是O(n^4)的方法。前两个循环分别枚举两个子串的起始位置,第三个循环枚举这两个字串的长度,最后一个循环用来比较两个子串是否相同。加上一点优化,AC!


    代码:

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    using namespace std;
    
    char a[201],b[201],c[201];
    int n,maxn;
    
    int main()
    {
        scanf("%s",&a); 
        n=strlen(a);
        for (int i=0;i<=n-2;i++)
        {
            for (int j=i+1;j<=n-1;j++)  //枚举子串开始位置
            {
                for (int k=1;k<=n-1;k++)  //字串长度
                {
                    int ok=1;
                    memset(b,0,sizeof(b));
                    memset(c,0,sizeof(c));
                    for (int q=1;q<=k;q++) b[q]=a[q+i-1];
                    for (int q=1;q<=k;q++) 
                    {
                        c[q]=a[q+j-1];
                        if (c[q]!=b[q])  //如果与另一个字串不相同
                        {
                            ok=0;
                            break;  //退出
                        }
                    }
                    if (ok==1&&k>maxn) maxn=k;
                    else if (ok==0) break;
                }
            }
        }
        printf("%d\n",maxn);
        return 0;
    }
    
  • 相关阅读:
    tomcat监控与优化
    rpm打包
    Rewrite和location 区别
    LNMP服务
    yum仓库脚本
    用户管理的脚本2
    pxe装机脚本
    用户管理的脚本1
    磁盘管理综合测试题
    MySQL 增量备份介绍及案例演示
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/9313099.html
Copyright © 2011-2022 走看看