[豪の算法奇妙冒险] 代码随想录算法训练营第八天 | 344-反转字符串、541-反转字符串II、Carl54-替换数字

代码随想录算法训练营第八天 | 344-反转字符串、541-反转字符串II、Carl54-替换数字


LeetCode344 反转字符串

题目链接:https://leetcode.cn/problems/reverse-string/description/

文章讲解:https://programmercarl.com/0344.反转字符串.html

视频讲解:https://www.bilibili.com/video/BV1fV4y17748/?vd_source=b989f2b109eb3b17e8178154a7de7a51

​ 挺简单的,使用双指针的思路,一头一尾相互交换元素即可完成字符串的倒置

image-20251126173716637

class Solution {
    public void reverseString(char[] s) {
        int left = 0;
        int right = s.length - 1;

        while(left < right){
            char temp = s[left];
            s[left] = s[right];
            s[right] = temp;
            left++;
            right--;
        }
    }
}

LeetCode541 反转字符串II

题目链接:https://leetcode.cn/problems/reverse-string-ii/description/

文章讲解:https://programmercarl.com/0541.反转字符串II.html

视频讲解:https://www.bilibili.com/video/BV1dT411j7NN/?vd_source=b989f2b109eb3b17e8178154a7de7a51

​ 这题需要注意for循环遍历字符串时不是i++,而是i+=2*k

​ 在一轮翻转中,首先先求第一个k的位置,如果 start+k > length,说明余下的不足k个,firstK = length,即将余下的全部进行翻转;如果 start+k <= length,则firstK = start+k,把start到firstK的这些字符进行翻转

​ 然后求2k的位置,如果 start + 2*k > length,说明余下的不足2k个,secondK = length;如果 start + 2*k <= length,则secondK = start + 2*k。后续再进行判断,若firstK < secondK,则把firstK和secondK之间的所有字符加入result,这包含了“正常把k~2k之间的字符放入result”和“剩下的字符够k个但不够2k个,把k个翻转后,剩下的正常放入result”两种情况

image-20251126190503647

class Solution {
    public String reverseStr(String s, int k) {
        int length = s.length();
        StringBuilder result = new StringBuilder(length);
        for(int start = 0; start < length; start += 2*k){
            StringBuilder temp = new StringBuilder();

            int firstK = 0;
            if(start + k > length){
                firstK = length;
            }else{
                firstK = start + k;
            }
            temp.append(s.substring(start, firstK));
            result.append(temp.reverse());

            int secondK = 0;
            if(start + 2*k > length){
                secondK = length;
            }else{
                secondK = start + 2*k;
            }
            
            if(firstK < secondK){
                result.append(s.substring(firstK, secondK));
            }
        }
        return result.toString();
    }
}

卡码网54 替换数字

题目链接:https://kamacoder.com/problempage.php?pid=1064

文章讲解:https://programmercarl.com/kamacoder/0054.替换数字.html

​ 第一次解,使用的是StringBuilder

image-20251126193235045

​ 后面了解到后序处理的思想,就再用后序处理的方法重新做了一遍

image-20251126194852706

posted @ 2025-11-26 19:51  SchwarzShu  阅读(10)  评论(0)    收藏  举报