leetcode 459. Repeated Substring Pattern

╄→гoц情女王★ 提交于 2020-03-03 14:37:30

方法一:采用kmp算法,获得next数组。并且next数组的最后一个元素代表的长度一定是s.length()-next[-1]的整数倍。

class Solution {
    public boolean repeatedSubstringPattern(String s) {
        int[] kmp = getnext(s);
        int len = s.length();
        return (kmp[len]!=0) && (kmp[len]%(len-kmp[len])==0);
    }
    public int[] getnext(String s){
        if(s.length()==1){
            return new int[]{-1,0};
        }
        int[] next = new int[s.length()+1];
        next[0] = -1;
        next[1] = 0;
        int cn = 0;//最长前缀的长度
        int i = 2;
        while(i<next.length){
            if(s.charAt(i-1)==s.charAt(cn)){
                next[i++] = ++cn;
            }else if(cn>0){
                cn = next[cn];
            }else{
                next[i++] = 0;
            }
        }
        return next;
    }
}

方法二:
直勾勾的想

class Solution {
    public boolean repeatedSubstringPattern(String s) {
        int n = s.length();
        for(int i=n/2;i>=1;i--){
            int c = 0;
            String sb = "";
            if(n%i==0){
                c = n/i;
            }
            for(int j=0;j<c;j++){
                sb += s.substring(0,i);
            }
            if(s.equals(sb)){
                return true;
            }
        }
        return false;
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!