[Leetcode] 459. 重複的子字串
阿新 • • 發佈:2019-01-10
題目描述:
給定一個非空的字串,判斷它是否可以由它的一個子串重複多次構成。給定的字串只含有小寫英文字母,並且長度不超過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; } }