《算法 4edit》1.2.6
Q:
如果字符串s中的字符循环移动任意位置之后能够得到另一字符串t,那么s就被称为t的回环变位。例如,ACTGACG 就是 TGACGAC 的一个回环变位,反之亦然。判定这个条件在基因组序列中的研究是十分重要的。编写一个算法检查两个给定的字符串s和t是否互为回环变位.
A:
- 将s2进行自我拼接,如果s1的长度等于s2的,并且拼接后的s2包含s1,则是回环变位
public static boolean circular1(String s1, String s2) {
return s1.length() == s2.length() && (s2 + s2).contains(s1);
}
- 将s1按位拆分为两部分,两部分重新拼接,如果出现了s2的字符,则是回环变位
public static boolean circular2(String s1, String s2) {
if (s1 == s2) return true;
if (s1.length() != s2.length())
return false;
for (int i = 0; i < s1.length(); i++) {
String temp1 = s1.substring(0, i);
String temp2 = s2.substring(i, s1.length());
if ((temp1 + temp2).equals(s2))
return true;
}
return false;
}