问题:给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(即将字符串s1的第一个字符挪动到最后一个位置,如s1=AABCD,移位一次后变成了ABCDA,循环反复)得到的字符串包含。例如,S1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。
以S1 = AABCD为例,先分析对S1进行循环移位之后的结果,如下所示:
AABCD—>ABCDA---->BCDAA---->CDAAB---->DAABC……
假设我们把前面的移走的数据进行保留,会发现有如下的规律:
AABCD—>AABCDA---->AABCDAA---->AABCDAAB---->AABCDAABC---->AABCDAABCD
可从中发现如果S2被循环移位后的S1包含,则S2必然包含于S1+=S1中
代码比较简单:
public static boolean transition(String s1, String s2) {
s1 += s1;
if (s1.contains(s2))
return true;
else
return false;
}
public static void main(String[] args) {
System.out.println(rotate("AABCD", "CDAA"));
}