原文:
Assume you have a method isSubstring which checks if one word is a substring of another. Given two strings, s1 and s2, write code to check if s2 is a rotation of s1 using only one call to isSubstring ( i.e., “waterbottle” is a rotation of “erbottlewat”).
译文:
假设你有一个isSubstring函数,可以检测一个字符串是否是另一个字符串的子串。 给出字符串s1和s2,只使用一次isSubstring就能判断s2是否是s1的旋转字符串, 请写出代码。旋转字符串:"waterbottle"是"erbottlewat"的旋转字符串。
如果s2是s1的旋转字符,那么s2一定是s1.concat(s1)的substring.
public static boolean isRotation(String a, String b) {
if (a == null || b == null) {
return false;
}
if (a.length() != b.length() || a.length() == 0 || b.length() == 0) {
return false;
}
a = a.concat(a);
// contains <-> isSubstring
return a.contains(b);
}
junit testcase
@Test
public void testIsRotation() {
System.out.println("isRotation");
assertEquals(false, q1_8.isRotation(null, null));
assertEquals(false, q1_8.isRotation("abc", null));
assertEquals(false, q1_8.isRotation(null, "abc"));
assertEquals(true, q1_8.isRotation("abc", "abc"));
assertEquals(false, q1_8.isRotation("abcd", "abc"));
assertEquals(true, q1_8.isRotation("abc", "cab"));
assertEquals(true, q1_8.isRotation("abc", "bca"));
assertEquals(false, q1_8.isRotation("abc", "bac"));
assertEquals(false, q1_8.isRotation("", ""));
assertEquals(true, q1_8.isRotation("javanetbeans", "tbeansjavane"));
}