1. 程式人生 > 其它 >Lc面試題0109字串輪轉

Lc面試題0109字串輪轉

package com.leetcode.leetcode.licm;

/**
 * @description: 面試題 01.09. 字串輪轉
 * 字串輪轉。給定兩個字串s1和s2,請編寫程式碼檢查s2是否為s1旋轉而成(比如,waterbottle是erbottlewat旋轉後的字串)。
 * <p>
 * 示例1:
 * <p>
 * 輸入:s1 = "waterbottle", s2 = "erbottlewat"
 * 輸出:True
 * 示例2:
 * <p>
 * 輸入:s1 = "aa", s2 = "aba"
 * 輸出:False
 * 提示:
 * <p>
 * 字串長度在[0, 100000]範圍內。
 * 說明:
 * <p>
 * 你能只調用一次檢查子串的方法嗎?
 * @author: licm
 * @create: 2021-07-16 09:24
 **/
public class Lc面試題0109字串輪轉 {

//    /**
//     * 方法1:雜湊表 超時
//     *
//     * @param s1
//     * @param s2
//     * @return
//     */
//    public static boolean isFlipedString(String s1, String s2) {
//        if (s1.length() != s2.length()) {
//            return false;
//        }
//
//        int[] res = new int[26];
//        for (int i = 0; i < s1.length(); i++) {
//            res[s1.charAt(i) - 'a']++;
//        }
//        for (int i = 0; i < s2.length(); i++) {
//            res[s2.charAt(i) - 'a']--;
//        }
//        for (int i = 0; i < res.length; i++) {
//            if (res[i] < 0) {
//                return false;
//            }
//        }
//
//        return true;
//
//    }

    /**
     * 方法2 String的 indexof
     * <p>
     * 因為s2是是旋轉的字串,所以s2+s2必然會有一個完整的s1存在,在用indexof匹配是否出現就可以了
     *
     * @param s1
     * @param s2
     * @return
     */
    public static boolean isFlipedString(String s1, String s2) {
        return s1.length() == s2.length() && (s2 + s2).indexOf(s1) > -1;
    }

    public static void main(String[] args) {
        String s1 = "waterbottle";
        String s2 = "erbottlewat";
        System.out.println(isFlipedString(s1, s2));

    }
}

不會,我可以學;落後,我可以追趕;跌倒,我可以站起來!