zoukankan      html  css  js  c++  java
  • 算法训练 字串统计

      
    时间限制:1.0s   内存限制:512.0MB
        
    问题描述
      给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。
    输入格式
      第一行一个数字L。
      第二行是字符串S。
      L大于0,且不超过S的长度。
    输出格式
      一行,题目要求的字符串。

      输入样例1:
      4
      bbaabbaaaaa

      输出样例1:
      bbaa

      输入样例2:
      2
      bbaabbaaaaa

      输出样例2:
      aa
    数据规模和约定
      n<=60
      S中所有字符都是小写英文字母。
    提示
      枚举所有可能的子串,统计出现次数,找出符合条件的那个
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int length[100][100],maxn;
    char str[100];
    int same(int s1,int s2,int len){
        for(int i=0;i<len;i++){
            if(str[i+s1]!=str[i+s2])
                return 0;
        }
        return 1;
    }
    int main(void){    
        int n,L;
        scanf("%d
    ",&L);
        gets(str);
        n = strlen(str);
        if(n==0){
            printf("");
            return 0;
        }
        for(int len=L;len<=n;len++){
            for(int i=0;i<n-len+1;i++){
                length[len][i]=1;
                for(int j=i+1;j<n-len+1;j++)
                    if(same(i,j,len)) length[len][i]++;
            }
        }
        int start,Length;
        for(int len=L;len<=n;len++){
            for(int i=0;i<n-len+1;i++)
                if(length[len][i] > maxn || (length[len][i]==maxn && Length != len)){
                    maxn = length[len][i];
                    Length = len;
                    start = i;
                }
        }
        for(int i=0;i<Length;i++)
            printf("%c",str[start+i]);
        return 0;
    }
  • 相关阅读:
    mode
    文件操作
    深浅拷贝
    基础数据类型补充
    再谈编码 decode和encode
    Python练习题 015:一颗自由落地的球
    Python练习题 014:完数
    Python练习题 013:求解a+aa+aaa……
    Python练习题 012:字符统计
    Python练习题 011:成绩打分
  • 原文地址:https://www.cnblogs.com/zuimeiyujianni/p/8628826.html
Copyright © 2011-2022 走看看