字符串移位包含问题

字符串移位包含问题

这是这次算法作业里逻辑最简单的。。。但是我还是只想到了暴力我好蠢。。。
在这里插入图片描述

问题

给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含。例如,S1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。

分析

最初想法十分愚蠢,大概就是换一次顺序就比较一次,是否包含。
这样每次都要比较,时间复杂度就是O(n2

但是,万能的某度给了我新思路,既然是循环位移,那就是说…
ABCD—>ABCDA---->ABCDAB---->ABCDABC---->ABCDABCD……
我在后面加上个自己,从不同的位置开始数,就是不同的循环位移串了,就包含了所有情况啊!!!!(而且复杂度还是O(n))
在这里插入图片描述

代码


/**
 * @ClassName RotateString
 * @Description 字符串移位包含问题
 *                 给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含。
 *                 例如,S1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。
 * @author 滑技工厂 https://blog.csdn.net/qq_41718454
 * @date 2020/3/7
 * @version 1.0
 */
public class RotateString {
    /*
     * @Title rotate
     * @Description 方法
     * @author 滑技工厂
     * @Date 2020/3/7
     * @param [s1, s2]
     * @return boolean
     * @throws
     */
    public static boolean rotate(String s1, String s2) {
        //创造一个s1,从不同的位置就是各个循环位移后的串
        s1 += s1;
        //比较
        if (s1.contains(s2))
            return true;
        else
            return false;

    }

    public static void main(String[] args) {
        System.out.println(rotate("AABCD", "CDAA"));
    }
}

就这样愉快的结束了
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值