【算法系列-字符串】反转字符串

【算法系列-字符串】反转字符串

欢迎来到【算法系列】第四弹 🏆 字符串,接下来我们将围绕字符串这类型的算法题进行解析与练习!一起加油吧!!( •̀ ω •́ )✧✨

1. 反转字符串(LeetCode 344)

【题目链接】344. 反转字符串 - 力扣(LeetCode)

1.1 思路分析🎯

这道题比较简单,通过双指针的方式解决问题

1.2 解题过程🎬

定义左右指针 left 和 right,left 从 数组起始下标开始,right 从 数组末端开始,通过循环依次交换左右指针所处位置的元素即可

1.3 代码示例🌰

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;
        }
    }
}

2. 反转字符串II(LeetCode 541)

【题目链接】541. 反转字符串 II - 力扣(LeetCode)

2.1 思路分析🎯

这道题我们通过 模拟 + 双指针 的方式解决问题,但我们需要先理清楚题目的几个关键要求

每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符,这句话表示不仅仅只遍历一次2k个字符,当字符串长度存在 n 个 2k 时(n >= 1),仍需要遍历计数2k个字符直到字符串被遍历完

在上述要求下,遍历到 剩余字符串长度小于2k 个字符,才会产生以下两种对剩余字符的操作:

  • 如果剩余字符少于 k 个,则将剩余字符全部反转;

  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样;

2.2 解题过程🎬

通过 for 循环遍历字符数组,每次步长为 i += 2 * k,即每一次对字符数组的 2k 个字符进行操作;

进行判断,当 i + k <= 数组长度时,进行反转,对 2k 个字符的 前k个 字符进行反转,继续循环;

直到 最后一轮遍历,此时的 字符数组长度(right - left) 小于等于 2k,开始对剩余字符进行判断:

当 i + k > arr.length 时,代表剩余字符少于 k 个,则将剩余字符全部反转, 否则表示剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样

2.3 代码示例🌰

class Solution {
    public String reverseStr(String s, int k) {
        char[] arr = s.toCharArray();
        for (int i = 0;i < arr.length;i += 2 * k) {
            if (i + k <= arr.length) {
                reverse(arr, i, i + k - 1);
                continue;
            }
            reverse(arr, i, arr.length - 1);
        }
        return String.valueOf(arr);
    }

    public void reverse(char[] arr, int left, int right) {
        while (left < right) {
            char temp = arr[left];
            arr[left++] = arr[right];
            arr[right--] = temp;
        }
    }
}

以上便是对字符串反转问题的介绍了!!后续还会继续分享其它算法系列内容,如果这些内容对大家有帮助的话请给一个三连关注吧💕( •̀ ω •́ )✧( •̀ ω •́ )✧✨

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值