1. 程式人生 > >[Leetcode] 459. 重複的子字串

[Leetcode] 459. 重複的子字串

題目描述:

給定一個非空的字串,判斷它是否可以由它的一個子串重複多次構成。給定的字串只含有小寫英文字母,並且長度不超過10000。

示例 1:

輸入: "abab"

輸出: True

解釋: 可由子字串 "ab" 重複兩次構成。

示例 2:

輸入: "aba"

輸出: False

示例 3:

輸入: "abcabcabcabc"

輸出: True

解釋: 可由子字串 "abc" 重複四次構成。 (或者子字串 "abcabc" 重複兩次構成。)

解題思路:

既然是重複出現組成的,那麼一定是第一個字母first到後面的另外某一個相等的字母first2是一個重複體,那麼我就開始嘗試,沒遇到一個相等的first就把前面當做一個重複體用judgeRep函式試一下看看行不行。

judgeRep(String s,String sub)函式是用來判斷字串s能否由子字串sub重複得來的,思路是看字串的長度是不是子串的整數倍,如果是的話就重複倍數次然後看看他們相等不,然後判斷。

第一步:

第二步:

程式碼實現(Java語言):

class Solution {
    public boolean repeatedSubstringPattern(String s) {
        char[] chars = s.toCharArray();
        char first = chars[0];
        String subStr = "";
        for(int i=1;i<chars.length;i++){
            if(chars[i] == first){
                subStr = s.substring(0,i);
                if(judgeRep(s,subStr))
                    return true;
            }
        }
        return false;
    }
    public boolean judgeRep(String s,String sub){
        if(s.length() % sub.length() != 0)
            return false;
        int group = s.length()/sub.length();
        String rep = "";
        for(int j = 0;j < group;j++){
            rep += sub;
        }
        if(rep.equals(s))
            return true;
        else
            return false;
    }
}