给定任意字符串,请帮小强找出其中的最长重复子串。
#include<iostream> using namespace std; int main(){ string input; cin>>input; int len=input.size(); int output=0; for(int i=1;i<len/2;i++){ int count=0; for(int j=0;j<len-i;j++){ if(input[j]==input[j+i]) count++; else count=0; if(count==i){ output=max(output,count*2); } } } cout<<output; return 0; }
s = input().strip() n = len(s) def getnum(s, n): for i in range(n // 2, 0, -1): c = 0 for j in range(0, n - i): if s[j] != s[j + i]: if n - j <= 2 * i: break c = 0 else: c += 1 if c == i: return c * 2 return 0 print(getnum(s, n))
import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); char[] a = str.toCharArray(); int length = str.length(); for (int i = length/2; i >0 ; i--) { int count = 0; for (int j = 0; j < length-i; j++) { if (a[j] == a[j+i]){ count++; }else{ count=0; } if (count == i){ System.out.println(count*2); return ; } } } System.out.println(0); } }
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); char[] str = br.readLine().toCharArray(); int maxLen = str.length / 2; loop: while(maxLen >= 0){ int count = 0; for(int i = 0; i + maxLen < str.length; i ++){ if(str[i] != str[i + maxLen]){ count = 0; }else{ count ++; if(count == maxLen) break loop; } } maxLen --; } System.out.println(Math.max(maxLen, 0) * 2); } }
#include<iostream> #include<string> using namespace std; class Solution { public: int get_string(string s) { int max_res=0; for(int i=0;i<s.size();i++) { for(int j=i+1;j<s.size();j++) { if(s[j]==s[i]) { int f1=i,f2=j; while(f1<j && f2<s.size()) { if(s[f1]!=s[f2]) { break; } else { f1++; f2++; } } if(f1==j &&max_res<j-i) max_res=j-i; } } } return 2*max_res; } }; int main() { Solution S2; string s1; getline(cin,s1); auto len=S2.get_string(s1); cout<<len<<endl; return 0; }
try while (1) a=input('','s'); for i=fix(length(a)/2):-1:1 n=0; for j=1:length(a)-i if a(j)==a(i+j) n=n+1; if n==i b(n)=2*n; end else n=0; end if length(a)==length(unique(a)) fprintf('%d\n',0); break end end end fprintf('%d\n',max(b)); break end catch end
def getMaxRepeatSubstringLength(s): length = len(s) for i in reversed(range(length//2)): count = 0 for j in range(length - i): if s[j] == s[j+i]: count = count + 1 else: if length - j <= 2 * i: break count = 0 if count == i: return count * 2 return 0 s = input() print(getMaxRepeatSubstringLength(s))
str_input = input() max = 0 for i in range(1, int(len(str_input)/2)+1): for j in range(len(str_input)-i): if str_input[j:j+i] == str_input[j+i:j+i+i]: max = i break print(max*2)
def check_valid(s,length): for i in range(len(s)): if i+length < len(s) and s[i] == s[i+length]: if i + length * 2 <= len(s): if s[i:i+length] == s[i+length:i+2*length]: return True return False def main(): s = input() left,right = 0,len(s)//2+1 max_length = 0 while left <= right: mid = (left+right)//2 if check_valid(s, mid): max_length = max(max_length,mid) left = mid + 1 else: right = mid - 1 return max_length*2 if 0 < max_length < len(s) else 0 print(main())
Python 60%通过,超时,建议使用二分查找 + Rabin-Karp 字符串编码 def solve(s): n = len(s) res = 0 # i表示重复子串的长度,则其范围在[1,n//2] for i in range(1,n//2+1): # 计数 cnt = 0 # 用长度为i的滑动窗口来遍历子串,若子串满足连续出现,则更新res for j in range(n-i): if s[j] == s[j+i]: cnt += 1 else: cnt = 0 if cnt == i: # 满足条件 # print(s[j-i+1:j]) 重复子串 res = max(res,cnt*2) return res while True: try: s = input() print(solve(s)) except: break