美文网首页
[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