美文网首页
[03]计算重复字符串长度-欢聚时代2018秋

[03]计算重复字符串长度-欢聚时代2018秋

作者: jdzhangxin | 来源:发表于2018-10-21 18:14 被阅读109次

    1.题目描述

    请从字符串中找出至少重复一次的子字符串的最大长度

    • 输入描述:
      字符串,长度不超过 1000
    • 输出描述:
      重复子串的长度,不存在输出 0
    • 输入示例:
      ababcdabcefsgg
      
    • 输出示例:
      3
      
    • 说明:
      abc 为重复的最大子串,长度为 3

    2.题目解析

    3.参考答案

    #include <bits/stdc++.h>
    using namespace std;
    
    int main(){
        string s;
        cin >> s;
        int res = 0;// 最大子串长度
        
        for(int i=0;i<s.size();++i){// 
            for(int j=i+1;j<s.size();++j){
                int len = 0; // 当前重复字符长度
                int now = i; // 保存当前下表
                int post = j; // 保存当前下表
                while(s[now] == s[post]){
                    ++now;
                    ++post;
                    ++len;
                }
                res = max(len,res);// 最大重复字串长度
            }
        }
        printf("%d\n",res);
        return 0;
    }
    
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int statLen(string str, int i, int j) {
      int cur_len = 0;
      while (i < str.size() && j < str.size() && str[i] == str[j]) {// 判断子串
        i++;
        j++;
        cur_len++;
      }
      return cur_len;
    }
    int naiveLRS(string str) {
      int maxlen = 0;
      // 遍历所有字符串
      for (int i = 0; i != str.size(); ++i) {
        int len = 0;
        for (int j = i + 1; j != str.size(); j++) {
          len = statLen(str, i, j);// 获取子串长度
          if (maxlen < len) { // 记录最大长度
            maxlen = len;
          }
        }
      }
      return maxlen;
    }
    int main() {
      string str;
      cin >> str;
      printf("%d", naiveLRS(str));
    }
    

    牛客题目

    相关文章

      网友评论

          本文标题:[03]计算重复字符串长度-欢聚时代2018秋

          本文链接:https://www.haomeiwen.com/subject/dzrloftx.html