在Java中检查字符串旋转
给定两个字符串s1 和 s2,编写一个片段来检查 s2 是否是 s1 的旋转。字符串可能包含重复项。
例子:
Input : s1 = "ABCD", s2 = "CDAB"
Output : True
String s1 is rotation of s2.
Input : s1 = "ABAD", s2 = "ADAB"
Output : True
Input : s1 = ABCD, and s2 = ACBD
Output : False
一个简单的解决方案是在 s2 中搜索 s1 的第一次出现。对于每个匹配,检查剩余的字符串是否循环匹配。
一个有效的解决方案是将 s1 与自身连接起来。 s2 是 s1 的旋转当且仅当它是旋转字符串的子字符串。在Java中,我们可以使用字符串 contains 或 indexOf 来检查子字符串。
// Java program to check if two given strings are
// rotations of each other
class StringRotation {
/* Function checks if passed strings (str1 and str2)
are rotations of each other */
static boolean areRotations(String str1, String str2)
{
// There lengths must be same and str2 must be
// a substring of str1 concatenated with str1.
return (str1.length() == str2.length()) &&
((str1 + str1).contains(str2));
}
// Driver method
public static void main(String[] args)
{
String str1 = "AACD";
String str2 = "ACDA";
if (areRotations(str1, str2))
System.out.println("Yes");
else
System.out.printf("No");
}
}
输出:
Yes