1. 程式人生 > 其它 >程式設計師面試金典1.9-假定 s2 由 s1 旋轉而成, 那麼, 我們可以找出旋轉點在哪兒。例如, 若以 wat 對 waterbottle 旋轉,就會得到 erbottlewat。在旋轉字串時,會把 s1 切分為兩部分: x 和 y,並將它們重 新組合成 s2

程式設計師面試金典1.9-假定 s2 由 s1 旋轉而成, 那麼, 我們可以找出旋轉點在哪兒。例如, 若以 wat 對 waterbottle 旋轉,就會得到 erbottlewat。在旋轉字串時,會把 s1 切分為兩部分: x 和 y,並將它們重 新組合成 s2

解法思路:
因為是旋轉,這裡沒有說旋轉多次(如果不限制旋轉次數,即是字元種類的個數相同即可)。就當一次來計算,那馬旋轉後的結果一定是兩個原字串拼接中的某一欄位

public class StringSpinTest {

    static boolean isRotation(String str1 , String str2) {
        if (str1.hashCode() == str2.hashCode()) {
            return true;
        }
        if (str1.length() != str2.length()) {
            return false;
        }

        String newString = str1 + str1;
        boolean result = isSubstring(newString, str2);
        return result;
    }

    /**
     * 手動寫一個isSubstring的方法用於測試,並非是題目給的
     * @param str1
     * @param str2
     * @return
     */
    private static boolean isSubstring(String str1, String str2) {
        for (int i = 0; i < str1.length(); i++) {
            if (str1.length() < (i + str2.length())) {
                return false;
            }
            if (str1.substring(i, i + str2.length()).equals(str2)) {
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        String str1 = "waterbottle";
        String str2 = "erbottlewat";
        boolean result = isRotation(str1, str2);
        System.out.println("是否是旋轉的字串: " + result);
    }
}