判断字符串回环变位
Posted 蘑菇君520
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断字符串回环变位相关的知识,希望对你有一定的参考价值。
如果字符串s中的字符循环移动任意位置之后能够得到另一字符串t,那么s就被称为t的回环变位。例如,ACTGACG 就是 TGACGAC 的一个回环变位,反之亦然。判定这个条件在基因组序列中的研究是十分重要的。编写一个算法检查两个给定的字符串s和t是否互为回环变位。
这是我在《算法(第四版)》里看到的一道练习题 ,当时的第一想法就是遍历字符串 t,从不同的索引位置将字符串t分解成两个子串,交换顺序拼接后再与s相比是否相等。算法如下:
public static boolean isCircularRotation(String s, String t)
if (s.length() != t.length())
return false;
int length = s.length();
for (int i = 1; i <= length; i++)
String left = s.substring(0, i);
String right = s.substring(i, length);
if ((right + left).equals(t))
return true;
return false;
后来看答案,提示说可以用一行代码就能搞定了。当时想了想,感觉不太可能,就作罢了。今天重新开始学习这本书的时候,再次看到这道题,突然有了想法︿( ̄︶ ̄)︿。代码如下:
public static boolean isCircularRotation(String s, String t)
return s.length() == t.length() && (t + t).contains(s);
解释:如果字符串s和t互为回环变位,则s可分解为“AB”,t可分解为“BA”。那么t与自身拼接后则为“BABA”,显然是会包含s的。这种思路比较巧妙,当然了,自认为算法效率并没有什么提高。
以上是关于判断字符串回环变位的主要内容,如果未能解决你的问题,请参考以下文章