字符串专题 LeetCode做题总结 541. 反转字符串 II (Java)

541. 反转字符串 II

  • 思路&java代码
  • 改进
  • Java语言点

思路&java代码

思路:定义一个函数 partialRe,专门用来反转字符串。利用 for 循环中的 i += 2*k 作为步数。

class Solution {
    public String reverseStr(String s, int k) {
        char[]a = s.toCharArray();
        int len = a.length;
        for(int i=0; i<len; i += 2*k) {
            int left = len-i;
            if(left < k) {//len-i刚好是剩余字符的长度
                partialRe(a,i,len-1);
            } else if (left >= k && left < 2*k) {
                partialRe(a,i,i+k-1);
            } else {//还有至少2k个
                partialRe(a,i,i+k-1);
            }
        }

        String str = String.valueOf(a);
        return str;
    }
    private void partialRe(char[] a, int l, int r) {
        for(int i=l,j=r; i<=j; i++,j--) {
            char temp = a[i];
            a[i] = a[j];
            a[j] = temp;
        }
    }
}

在这里插入图片描述
我的错误: partialRe函数中 交换的是 a[i] 和 a[j] ,而不是 a[l] 和 a[r]

改进

看了代码随想录的代码后,有改进的地方。

我的代码中,if else 逻辑是冗余的,且三个if else都可以合并。因为三种情况都会有反转,只是需要确定起始位置start和结束位置end,

int start = i;

//这里是判断尾数够不够k个来取决end指针的位置
int end = Math.min(a.length - 1, start + k - 1);

Java语言点

  1. String转换成char数组:String->char[]
    利用 toCharArray方法
String s = "xxxxxxxxx"
char[]a = s.toCharArray();
  1. char数组转换成 String:char[] -> String
    valueOf 或者 new String
char[]a = ['a', 'b', 'c'];

//方法一
String str = String.valueOf(a);

//方法二
String str = new String(a);
  1. 用异或运算反转
char[] ch = s.toCharArray();
//省略
while(start < end){
        ch[start] ^= ch[end];
        ch[end] ^= ch[start];
        ch[start] ^= ch[end];
        start++;
        end--;
    }

你可能感兴趣的:(LeetCode做题总结,leetcode,java)