1. 程式人生 > >leetcode (Repeated Substring Pattern)

leetcode (Repeated Substring Pattern)

Title:Repeated Substring Pattern   459

Difficulty:Easy

原題leetcode地址:https://leetcode.com/problems/repeated-substring-pattern/

 

1.   將字串首尾相加,然後將新的字串的第一位和最後一位去掉,判斷原始的字串是不是新的字串的子串

時間複雜度:O(1),沒有迴圈語句,但是呼叫了split方法。

空間複雜度:O(1),沒有申請額外空間。

    /**
     * 將字串首尾相加,然後將新的字串的第一位和最後一位去掉,判斷原始的字串是不是新的字串的子串
     * 通過split方法切分,如果切分後的長度為1,則為false,否則為true
     * @param s
     * @return
     */
    public static boolean repeatedSubstringPattern(String s) {

        if (s == null || s.length() < 2) {
            return false;
        }

        String newStr = s + s;
        newStr = newStr.substring(1, newStr.length() - 1);
        System.out.println(newStr);

        String str[] = newStr.split(s);
        if (str.length == 1) {
            return false;
        }
        else {
            return true;
        }

    }

1.  一個字串是由某個子字串組成的,那麼這個字串的長度肯定是這個子字串長度的倍數,也就是說子字串長度是這個字串長度的約數

時間複雜度:O(n^2),巢狀迴圈,仔細分析也沒有n^2。

空間複雜度:O(n),申請額外空間List,其實沒有總長度n。

    /**
     * 一個字串是由某個子字串組成的,那麼這個字串的長度肯定是這個子字串長度的倍數,也就是說子字串長度是這個字串長度的約數。
     * 某個子字串肯定是這個字串的字首
     * @param s
     * @return
     */
    public static boolean repeatedSubstringPattern1(String s) {

        if (s == null || s.length() < 2) {
            return false;
        }

        int len = s.length();
        List<Integer> list = new ArrayList<Integer>();

        for (int i = 1; i < len / 2 + 1; i++) {
            if (len % i == 0) {
                list.add(i);
            }
        }

        for (int i : list) {
            String subStr = s.substring(0, i);
            boolean res = true;
            for (int j = 0; j < len / i; j++) {
                if (!subStr.equals(s.substring(j * i, (j + 1) * i))) {
                    res = false;
                    break;
                }
                else {
                    continue;
                }
            }
            if (res) {
                return true;
            }
            else {
                continue;
            }
        }

        return false;

    }