【Leetcode-每日一题】旋转字符串

旋转字符串
难度:简单
在这里插入图片描述
如果字符串goal可以由s旋转而成,那么首先两个字符串长度需要相等;其次,我们取s的首字母,goal必有对应的与之相同的字母且后续每个位置对应s首字母后续的字母,那么我们模拟过程判断即可。
代码如下:

	public boolean rotateString(String s, String goal) {
        if (s.length()!=goal.length()){
            return false;
        }
        char c = s.charAt(0);
        for (int i = 0; i < goal.length(); i++) {
            if (goal.charAt(i)==c){
                boolean flag = true;
                for (int j = 1; j < goal.length(); j++) {
                    int tmp = i+j;
                    if (goal.charAt(tmp%goal.length())!=s.charAt(j)) {
                        flag = false;
                        break;
                    }
                }
                if (flag){
                    return true;
                }

            }
        }
        return false;
    }

执行结果:成功
在这里插入图片描述
本来看到100%打算心满意足的离开,但没想到题解更优秀。
如果 goal 可由 s 经过多步旋转而来,那么 goal 必然会出现在 s + s 中!!

	public boolean rotateString(String s, String goal) {
        return s.length() == goal.length() && (s + s).contains(goal);
    }

ORZ 这怎么就没想到呢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值