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

浙公网安备 33010602011771号