首页 > 学院 > 开发设计 > 正文

我的算法学习之路

2019-11-08 01:43:39
字体:
来源:转载
供稿:网友

1.回环变位

算法(第四版)1.2.6题:

如果字符串s中的字符循环移动任意位置之后能够得到另一字符串t,那么s就被称为t的回环变位。例如,ACTGACG 就是 TGACGAC 的一个回环变位,反之亦然。判定这个条件在基因组序列中的研究是十分重要的。编写一个算法检查两个给定的字符串s和t是否互为回环变位。

跟下面的一个哥们儿想的一样,想着用双循环,i ,j什么的,我比较笨,真的尝试着写了写,结果浪费了一个多小时,套了两个循环加一个if语句,最后还没写出来,吐血……

最后在网上找了找答案,发现有非常简单的方法,一行代码就能实现,有两种:

第一种是调用String类的cotains(String s)方法,这个方法是判断调用方法的对象(字符串类型)是否包含字符串s,返回值是boolean类型的,如果包含返回true,不包含则返回false;

代码是:

public class CircularRotation{    public static void main(String[] args){        String s = "HAHAWORLD";        String t = "WORLDHAHA";        boolean b = isCircularRotation(s, t);        StdOut.PRintln(b);    }    public static boolean isCircularRotation(String s, String t){       return (s.length()==t.length()) && (s+s).contains(t);    }}

第二种是通过String类下的contact(String s)方法和indexOf(String t)方法的组合实现的,,contact()方法是将调用方法的对象(字符串类型)跟传入的字符串s连接起来,返回一个新的字符串,indexOf()方法则是“返回指定子字符串在此字符串中第一次出现处的索引。”“如果字符串参数作为一个子字符串在此对象中出现,则返回第一个这种子字符串的第一个字符

的索引;如果它不作为一个子字符串出现,则返回 -1。”通过判断返回的值是否大于0来判断字符串t是否存在于调用方法的字符串中。

代码是:

public class CircularRotation{    public static void main(String[] args){        String s = "HAHAWORLD";        String t = "WORLDHAHA";        boolean b = isCircularRotation(s, t);        StdOut.println(b);    }    public static boolean isCircularRotation(String s, String t){       return (s.length() == t.length()) && (s.concat(s).indexOf(t) >= 0);       }}正常逻辑实现写出来的代码如下,其中参考了蘑菇君520的思路,在此表示感谢,开源的力量是伟大的:

public class CircularRotation{    public static void main(String[] args){        String s = "HAHAWORLD";        String t = "WORLDHAHA";        boolean b = isCircularRotation(s, t);        StdOut.println(b);    }    public static boolean isCircularRotation(String s, String t)            if(s.length()!=t.length()){            StdOut.println("Length not equal");            return false;        }        for(int i=0; i<s.length(); i++){            String ss = s.substring(0, i);            String sss = s.substring(i, s.length());            if((sss + ss).equals(t))                return true;        }        StdOut.println("Not equal");        return false;    }}

以下是参考所用的两篇博客,在此表示感谢!

链接:容易想复杂的"回环变位"

链接:判断字符串回环变位


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表