344. 反转字符串541. 反转字符串 II

344. 反转字符串

题目链接 反转字符串

题目描述

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

思路

空间复杂度是O(1),不要额外的去申请空间,原地操作
字符串的左右分别进行交换,显而易见采用双指针法

代码

for循环

点击查看代码
class Solution {
    public void reverseString(char[] s) {
         int len = s.length;
        for (int i = 0,j=len-1; i < s.length/2; i++,j--) {//折半交换
            //进行字符交换
            char temp = s[i];
            s[i] = s[j];
            s[j] = temp;
        }
    }
}
while循环
点击查看代码
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--;
        }
    }
}

总结

空间复杂度为o(1)表示所需空间为常量,并且与n无关。
O(1)是最低的时空复杂度,也就是耗时/耗空间与输入数据大小无关,无论输入数据增大多少倍,耗时/耗空间都不变。 哈希算法就是典型的O(1)时间复杂度,无论数据规模多大,都可以在一次计算后找到目标(不考虑冲突的话)。

541. 反转字符串 II

题目链接

反转字符串 II

题目描述

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例 1:
输入:s = "abcdefg", k = 2
输出:"bacdfeg"
示例 2:
输入:s = "abcd", k = 2
输出:"bacd"

代码

点击查看代码
//时间复杂度O(n)
class Solution {
    public String reverseStr(String s, int k) {
        if (s.length() == 0) return null;
        char[] chars = s.toCharArray();
        for (int i = 0; i < s.length(); i += 2 * k) {//循环次数为n/k,时间复杂度O(n)
            //满足k个,对前k个进行反转
            if (i + k <= s.length()) {
                reverse(chars, i, i + k);
            } else {//少于k个,对剩余字符反转
                reverse(chars, i, s.length());
            }
        }
        return new String(chars);
    }

//循环次数为n/2,时间复杂度O(n/2)=O(n)
    public void reverse(char chars[], int l, int r) {//左闭右开
        r--;
        while (l < r) {
            char temp;
            temp = chars[l];
            chars[l] = chars[r];
            chars[r] = temp;
            l++;
            r--;
        }
    }
}

总结

  • 将字符串转为数组:char chars = s.toCharArray();
  • 将数组转为字符串进行返回:return new String(chars);
  • 一般来说,自己实现的库函数遵循左闭右开原则
posted @ 2023-09-04 09:47  像峰一样  阅读(17)  评论(0)    收藏  举报