[LeetCode]796. 旋转字符串

[LeetCode]796. 旋转字符串,第1张

文章目录
  • 题目描述
  • 算法实现
    • 模轮转(类似的题挺多的)
    • 模轮转(编码优化)
    • java字符串 *** 作函数contains函数的使用


题目描述

难度:简单

算法实现 模轮转(类似的题挺多的)
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);
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/790635.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存