1. 程式人生 > >LeetCode-459. 重複的子字串

LeetCode-459. 重複的子字串

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

示例 1:

輸入: “abab”

輸出: True

解釋: 可由子字串 “ab” 重複兩次構成。
示例 2:

輸入: “aba”

輸出: False
示例 3:

輸入: “abcabcabcabc”

輸出: True

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

解題思路:字串是由重複子串構成,說明重複子串的length必定小於等於源字串的一半,還有就是s.length() % length == 0。所以,把子串的長度初始化為s.length()/2,然後迴圈判斷。
       時間複雜度為:O(n)

程式碼如下:

class Solution {
    public boolean repeatedSubstringPattern(String s) {
        // 判斷魯棒性
        if (s == null || s.length() <= 1) {
            return false;
        }
        int length = s.length();
        // 迴圈判斷
        for (int i = length/2; i > 0; i--) {
            // 判斷是否滿足重複子串
            if
(length % i == 0) { StringBuilder sb = new StringBuilder(); // 得到重複子串的個數 int c = length / i; String temp = s.substring(0, i); for (int j = 0; j < c; j++) { // 利用StringBuilder 拼接 sb.append(temp); } if
(sb.toString().equals(s)) { return true; } } } return false; } }

通過率如下:
這裡寫圖片描述