回环变位(Circular Rotation)

回环变位:如果字符串s中的字符循环移动任意位置之后能够得到另一个字符串 t,那么 s 称为 t 的回环变位(Circular Rotation)。例如,”ACTGACG” 就是 “TGACGAC” 的一个回环变位。

一般的实现思想

利用循环的方式遍历字符串t,从循环次数i处将字符串t分成两个字串后交换顺序拼接成一个新的字符串,比较新的s和新的字符串是否相等。

public static boolean isCircularRotation1(String s, String t)
{
    if(s.length() != t.length())   //字符串长度不等则没必要再比较,直接返回false
        return false;
    else
    {
        int N = s.length();
        System.out.println(N);
    for(int i=0; i<=N; i++)
        {
            String subT1 = t.substring(0, i);     //在索引i处分割字符串t
            String subT2 = t.substring(i, N);
            if(s.equals(subT2 + subT1))    //交换顺序连接分割后的字串
                return true;
        }
        return false;
    }
}

让代码简单点

《算法》(Algorithms)这本书的习题中关于回环变位给了这么一行提示:答案只需要一行用到 indexOf()、length() 和字符串连接的代码。

怎么实现呢?——将 t 和 t 自身连接,这样如果 t 是 s 的回环变位,那么s肯定是 “t+t” 的一个子串!

方法如下:

public static boolean isCircularRotation(String s, String t)
{
    return (s.length() == t.length()) && ((t + t).indexOf(s) > 0);
}

其中关于字符串对象的方法的具体使用可以参考 javaAPI文档,里面介绍的很详细。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值