• 【算法萌新闯力扣】:旋转字符串


        力扣热题:796.旋转字符串

    开篇

     今天下午刷了6道力扣算法题,选了一道有多种解法的题目与大家分享。

    题目链接:796.旋转字符串

    题目描述

    在这里插入图片描述

    代码思路

     完全按照题目的要求,利用StringBuffer中的方法对字符串进行旋转,寻找相同的一项

    代码纯享版

    class Solution {
        public boolean rotateString(String s, String goal) {
            if(s.length() != goal.length()) return false;
            StringBuffer str = new StringBuffer(s);
            for(int i = 0; i < s.length(); i++){
                if(str.toString().equals(goal)) return true;
                char a = str.charAt(0);
                str.delete(0,1);
                str.append("" + a);
            }
            return false;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    代码逐行解析版

    class Solution {
        public boolean rotateString(String s, String goal) {
            if(s.length() != goal.length()) return false; //两个字符串如果长度不同,一定不符合要求
            StringBuffer str = new StringBuffer(s);//改变s的类型,方便操作
            for(int i = 0; i < s.length(); i++){
                if(str.toString().equals(goal)) return true; //如果两个字符串一样,返回true
                char a = str.charAt(0); //根据题目要求,以下3行对字符串进行旋转
                str.delete(0,1);
                str.append("" + a);
            }
            return false; //对字符串旋转与其长度相同的次数后仍无法满足要求,返回false
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    其它解法

    1.利用取模运算,不需要对字符串进行旋转即可进行判断

    class Solution {
        public boolean rotateString(String s, String goal) {
            int m = s.length(), n = goal.length();
            if (m != n) {
                return false;
            }
            for (int i = 0; i < n; i++) {
                boolean flag = true;
                for (int j = 0; j < n; j++) {
                    if (s.charAt((i + j) % n) != goal.charAt(j)) {
                        flag = false;
                        break;
                    }
                }
                if (flag) {
                    return true;
                }
            }
            return false;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    2.这方法太牛逼了。字符串s+s中包含了旋转的所有结果,只需要判断goal是否为s+s的子串。

    class Solution {
        public boolean rotateString(String s, String goal) {
            return s.length() == goal.length() && (s + s).contains(goal);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    结语

     如果这道题的分享对你有帮助,点个关注支持一下,我会每天更新力扣题目的讲解,与大家一起进步。

  • 相关阅读:
    ab4d:ViewerSvg - svg to xaml converter
    “之江创客”聚焦农村电商创新发展 扎实助推共同富裕
    C语言习题~day32
    Vulnhub系列靶机-The Planets Earth
    握住音乐的法宝 - 简谱
    Java设计模式-工厂模式
    Hive CLI和Beeline命令行的基本使用
    VSCode 和 CLion
    莫名锁表? --- mysql的事务隔离级别
    无人机航拍图像拼接与目标识别
  • 原文地址:https://blog.csdn.net/m0_73709096/article/details/134492677