[LeetCode]796. 旋转字符串


题目描述

难度:简单
在这里插入图片描述

算法实现

模轮转(类似的题挺多的)

class Solution {
    public boolean rotateString(String s, String goal) {
        char[] chars = s.toCharArray();
        int charsLen = chars.length;
        int count = 0;
        while(count<chars.length){
            
            StringBuffer buffer = new StringBuffer();

        for(int i =count;i<charsLen+count;++i){
            buffer.append(chars[i%charsLen]);
        }
        
        if(buffer.toString().equals(goal)){
                return true;
            }
        
        count++;
        
        }
        return false;
    }
}

/*

[2022年04月07日00时38分20秒_]
开始构思
================

[2022年04月07日01时00分15秒_]思路1:
s旋转若干次,是否能变成goal。
若干次是否有个上限次数?
分析:上限次数是s的字符串长度,因为超过了就变成了轮转,没有意义,还浪费时间性能。
等值判断?
分析:是等值判断
================

[2022年04月07日01时00分34秒_]编码完成,测试了
================

[2022年04月07日01时01分05秒_]ok,通过了
================

[2022年04月07日01时03分14秒_]在编码过程中,本题的关键在于取模 % 的运算,取模具有轮转性质。
================


*/

在这里插入图片描述
在这里插入图片描述

模轮转(编码优化)

class Solution {
    public boolean rotateString(String s, String goal) {
        char[] chars = s.toCharArray();
        int charsLen = chars.length;
        int count = 0;
        StringBuffer buffer = new StringBuffer();
        
        while(count<charsLen){
        
        for(int i =count;i<charsLen+count;++i){
            buffer.append(chars[i%charsLen]);
        }
        
        if(buffer.toString().equals(goal)){
              return true;
           }
            buffer.delete(0,charsLen);
        
        count++;
        
        }
        return false;
    }
}

/*

[2022年04月07日00时38分20秒_]
开始构思
================

[2022年04月07日01时00分15秒_]思路1:
s旋转若干次,是否能变成goal。
若干次是否有个上限次数?
分析:上限次数是s的字符串长度,因为超过了就变成了轮转,没有意义,还浪费时间性能。
等值判断?
分析:是等值判断
================

[2022年04月07日01时00分34秒_]编码完成,测试了
================

[2022年04月07日01时01分05秒_]ok,通过了
================

[2022年04月07日01时03分14秒_]在编码过程中,本题的关键在于取模 % 的运算,取模具有轮转性质。
================


*/

性能没有大差别在这里插入图片描述

java字符串操作函数contains函数的使用

官方题解中解法之一是对contains函数的使用,使用java版本已实现了的字符串操作api。

[2022年04月08日16时38分34秒_]
两字符串长度须相等,只需叠加一次其一字符串,再与另一个字符串做是否包含检测,便能求出结果。

================

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

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

dnbug Blog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值