计算重复字符串长度

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

输入描述:

字符串,长度不超过1000

输出描述:

重复子串的长度,不存在输出0

示例1

输入

ababcdabcefsgg

输出

3

说明

abc为重复的最大子串,长度为3
#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));
}
import java.util.*
public class Main{
    private static int statLen(String X,int k,int j){
        int cur_len = 0;
        while(k < X.length()&&j<X.length()&&X.charAt(k) == X.charAt(j)){
            k++;
            j++;
            cur_len++;
        }
        return cur_len;
    }

    public static int nativeLRS(String x){
        int maxlen = 0;
        int length = x.length();
        for(int i = 0; i < length; i++){
            int len = 0;
            int k = i;
            for(int j = i+1;j<length;j++){
                len = staLen(x,k,j);
                if(maxlen < len)
                    maxlen = len;
            }   
        }
        return maxlen;
    }

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String X = sc.nextLine();
        System.out,println(nativeLRS(X));
    }
}

猜你喜欢

转载自blog.csdn.net/strawqqhat/article/details/88084637
今日推荐