344&&541 字符串反转

17 阅读1分钟

图片.png 非常简单的一道题,写不出来的话可以休息了。

class Solution {
    public void reverseString(char[] s) {
        int len = s.length;
        for(int i=0;i < len/2;i++){
            char temp = s[i];
            s[i] = s[len-i-1];
            s[len-i-1] = temp;
        }
        
    }
}

图片.png 首先要清楚这道题要求,看着复杂其实确实挺复杂的(英语课拿笔模拟了好久)

  • 首先就是循环条件怎么写,不要习惯写i++
  • 然后就是判断条件,可以模拟几次,2k个一组,然后交换前k个,最后一组单独处理一下。
  • swap函数也很重要

ps:字符串是不可更改的,所以先用toCharAray方法转化为字符数组,然后再new一个新的字符串对象,最后return结果。

class Solution {
    public String reverseStr(String s, int k) {
        int len = s.length(); 
        char[] arr = s.toCharArray();  
        for (int i = 0; i < len; i += 2 * k) {  画图可以看一下过程
            if (len - i >= k) {
                swap(arr, i, i + k - 1);
            } else {
                swap(arr, i, len - 1);
            }
        }
        String result = new String(arr);

        return result;

    }

    public void swap(char[] s, int m, int n) {
        int len = n - m + 1;
        for (int i = 0; i < len / 2; i++) {//while(m<n)
            char temp = s[m];
            s[m] = s[n];
            s[n] = temp;
            m++;
            n--;
        }
    }

}