Leetcode程序员面试金典面试题:01.09.字符串轮转


一、 题目:01.09.字符串轮转

题目描述:

字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。

示例1:

输入:s1 = “waterbottle”, s2 = “erbottlewat”
输出:True
示例2:

输入:s1 = “aa”, s2 = “aba”
输出:False
提示:

字符串长度在[0, 100000]范围内。
说明:

你能只调用一次检查子串的方法吗?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/string-rotation-lcci

二、解题思路:

1.思路:

算法1:
(1)先判断s1和s2字符串长度是否相等,若不相等,返回false;
(2)如果相等,让s2和s2本身做字符串连接生成新字符串s,判断s是否包含s1;
(3)若包含,则返回true;

2.代码:

算法1:

    public boolean isFlipedString(String s1, String s2) {
        if(s1.length() != s2.length()) return false;//判断字符串长度是否相等
        String s = s2+s2;
        return s.contains(s1);
    }

Leetcode原图:

在这里插入图片描述


补充:

其实这个题用“题目:01.02.判断是否互为字符重排”的算法同样能解:

public class T01 {
    public boolean CheckPermutation(String s1, String s2) {
        if(s1.length() != s2.length()) return false;//判断字符串长度是否相等
        StringBuilder sm = new StringBuilder(s2);//StringBuilder类创建的字符串可以进行delete操作
        for(int i = 0;i<s1.length();i++) {//依次判断s1中的字符,是否在s2中都存在
            String s = String.valueOf(s1.charAt(i));//依次获取s1中的字符
            int index = sm.indexOf(s);//获取字符在s2中的索引位置
            if(index == -1) return false;//如果索引为-1,说明两个字符串的字符不相同
            sm.deleteCharAt(index);//删除s2中已经比对过的字符
        }
        return true;
    }

只不过这个算法复杂度要高一些

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李小枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值