程序员面试金典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);
    }
}

posted @ 2021-11-06 12:26  樱花颂  阅读(55)  评论(0)    收藏  举报