LeetCode每日1题--左旋转字符串

82 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情

前言

算法的重要性不言而喻!区分度高!

现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。

说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!

提前入门学习书籍:CPrimerPlus、大话数据结构

image-20220705103735001

刷题网站

代码随想录 (programmercarl.com)

leetcode

我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以

刷题嘛,最重要的就是坚持了!!!

画图软件

OneNote

这个要经常用,遇见不懂的流程的话就拿它画一画!

笔记软件

Typoral

题目

image.png

解析


一、反转区间为n的字串

reverseString(sb, 0, n - 1);

对字符的反转我们采用StringBuilder进行,直接new StringBuilder生产sb对象,然后给sb设置反转后想要的结果。通过setCharAt(key,value)设置

代码如下:

while (start < end) {
    char temp = sb.charAt(start);
    sb.setCharAt(start, sb.charAt(end));
    sb.setCharAt(end, temp);
    start++;
    end--;
}

二、反转区间为n到末尾的子串

reverseString(sb, n, len - 1);

至此,我们最后只需要整体对字符串进行一次反转,就能实现左旋转字符串!

同样是StringBuilder这种形式

三、对字符串整体进行反转

sb.reverse().toString();

流程如下

image-20220805090832140

完整代码如下

class solution{
    public String reverseLeftWords(String s, int n) {
        int len = s.length();
        StringBuilder sb = new StringBuilder(s);
        reverseString(sb, 0, n - 1);
        reverseString(sb, n, len - 1);
        return sb.reverse().toString();
    }
​
    public void reverseString(StringBuilder sb, int start, int end) {
        while (start < end) {
            char temp = sb.charAt(start);
            sb.setCharAt(start, sb.charAt(end));
            sb.setCharAt(end, temp);
            start++;
            end--;
        }
    }
}

总结

有没有发现和昨天练习的题很相似,昨天练习的也有旋转字符串这一步。其实旋转字符串这里我们可以直接加深记忆,在遇到这样的题直接就属于默写下来了!