美文网首页
Java经典问题——回环变位

Java经典问题——回环变位

作者: 这个太难了 | 来源:发表于2017-12-06 19:59 被阅读0次

这是我在《算法》(第四版)里看到的。问题描述:如果字符串s中的字符循环移动任意位置之后能够得到另一个字符串t,那么s就被称为t的回环变位(circular rotation)。例如,ACTGACG就是TGACGAC的一个回环变位,反之亦然。判定这个条件在基因组序列的研究中是很重要的。编写一个程序检查两个给定的字符串s和t是否互为回环变位。提示:答案只需要一行用到indexof()、length()和字符串连接(+)的代码。
看到这个问题首先想到的是用for循环来遍历比较字符串回环变位的每一种情况,来判断是不是互为回环变位。(但是不止一行代码)

方法:将s拆分成左右两部分,然后令str =右(sr)+左(sl),遍历所有情况。如果是回环字符串的话,必定会有 str = t 的情况
如下代码:
/*-----------------------方法1--------------------------*/
public static boolean xunhuan(String s, String t) {
        if(s.length() != t.length()) {
            return false;
        }
        String sl,sr;
        int n = s.length();
        for(int i = 0; i <= n; i++) {
            /*substring()包含左边界,不包含右边界*/
            sl = s.substring(0, i); //即此处不包含i,所以下边应该从i开始
            sr = s.substring(i, n);//注意此处的左边界 应该是i,不是i+1。否则会越界错误
            if((sr + sl).equals(t)) {
                return true;
            }
        }
        return false;
    }
一行代码实现就需要下边的技巧了:

下边的方法中有取了一个巧:如果字符串s和t互为回环变位,若s为“AB”,t为“BA”。那么t与自身拼接(t + t)后则为“BABA”,很明显是会包含s的。

我们需要先知道以下方法的意义:

1、indexOf(String str)返回指定子字符串在此字符串中第一次出现处的索引
2、length() 返回字符串的长度
3、contains(String str)判断指定字符串是否包含在此字符串里边,如果在则返回true,否则返回false。

完整代码:
public class Sample {
    public static boolean xunhuan(String s, String t) {
            /*------------方法2---------------*/
        //return ((s.length() == t.length()) && ((t + t).contains(s)));
            /*------------方法3---------------*/
        return ((s.length() == t.length()) && ((t + t).indexOf(s)>=0));
    }
    public static void main(String[] args) {
            String s = "ACTGACGHC";
            String t = "TGACGHCAC";
            System.out.println(xunhuan(s, t));
    }
}

输出结果

true

相关文章

  • Java经典问题——回环变位

    这是我在《算法》(第四版)里看到的。问题描述:如果字符串s中的字符循环移动任意位置之后能够得到另一个字符串t,那么...

  • 1.2.6 回环变位

    如果字符串s中的字符循环移动任意位置之后能够得到另一个字符串t, 那么s就被称为t的回环变位(circular r...

  • 记录一些构思精妙的算法

    回环变位 如果字符串s中的字符循环移动任意位置之后能够得到另一个字符串t,那么s就被称为t的回环变位。例如,ACT...

  • 变位词问题

    "变位词"判断问题 问题描述 所谓变位词是指两个词之间存在组成字母的重新排列关系 如:heart和earth,py...

  • “变位词”问题

    “变位词”问题 问题描述 变位词是指两个词存在组成字母的重新排列问题。例如:heart 和 earth、pytho...

  • Java 经典问题

    九种基本类型及封装类 基本类型booleanbytecharshortintlongdoublefloat 二进制...

  • Java 经典问题

    九种基本类型及封装类 switch语句后的控制表达式只能是short、char、int、long整数类型和枚举类型...

  • Java 经典问题

    九种基本类型及封装类 基本类型 boolean byte char short int long double f...

  • 在Java中字符串是通过引用传递的?

    原文: String is passed by “reference” in Java 这是一个经典的java问题...

  • 1.2 数据抽象 1.2.6

    题目:如果字符串s中的字符循环移动任意位置之后能够得到另一字符串t,那么s就被称为t的回环变位(circilar ...

网友评论

      本文标题:Java经典问题——回环变位

      本文链接:https://www.haomeiwen.com/subject/uhvlixtx.html