《算法 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;
}

 

posted on 2019-04-16 20:13  jeasion  阅读(291)  评论(0编辑  收藏  举报