《LeetCode力扣练习》代码随想录——字符串(重复的子字符串—Java)
刷题思路来源于 代码随想录
459. 重复的子字符串
-
移动匹配
class Solution { public boolean repeatedSubstringPattern(String s) { String ss=s+s; char[] chs=ss.toCharArray(); chs=Arrays.copyOfRange(chs,1,chs.length-1); return new String(chs).contains(s); } }
-
KMP算法
class Solution { public boolean repeatedSubstringPattern(String s) { if(s.length()==1){ return false; } char[] chs=s.toCharArray(); if(chs.length==2&&chs[0]!=chs[1]){ return false; } int[] next=new int[chs.length+1]; getNext(chs,next); int same=next[next.length-1]; if(same>0&&(chs.length%(chs.length-same)==0)){ return true; } return false; } private void getNext(char[] chs,int[] next){ next[0]=-1; next[1]=0; int j=1; int k=0; int i=j+1; int n=next.length; while(i<n){ if(k==-1||chs[k]==chs[i-1]){ next[i]=k+1; k++; i++; }else{ k=next[k]; } } } }