代码随想录day8|344. 反转字符串、541. 反转字符串 II、剑指 Offer 05. 替换空格、151. 反转字符串中的单词、剑指 Offer 58 - II. 左旋转字符串

344. 反转字符串

  • 分析:双指针反转即可

  • 代码:

public void reverseString(char[] s) {
    for(int i = 0, j = s.length - 1; i < j; i++, j--){
        char temp = s[i];
        s[i] = s[j];
        s[j] = temp;
    }
}

541. 反转字符串 II

  • 分析:遍历字符串时,以每次2k进行遍历,进入循环后,判断当前i+k的索引是否越界,不越界则反转i到i+k段的字符串,最后操作i到s.length()段的字符串,此操作遵循左闭右开区间的规则,因此right取k - 1,且left不能取到区间的中值,最终代码如下。

  • 代码:

public String reverseStr(String s, int k) {
    char[] str = s.toCharArray();
    for(int i = 0;i < str.length;i += 2 * k){
        //处理i到i+K
        if(i + k <= str.length){
            reverse(str, i, i + k);
            continue;
        }    
        //处理i到s.length()末尾段
        reverse(str, i, str.length);
    }

    return new String(str);
}

private void reverse(char[] str, int i, int k){
    for(int left = i, right = k - 1;left < i + (k - i + 1)/2;left++, right--){
        char temp = str[left];
        str[left] = str[right];
        str[right] = temp;
    }
}

剑指 Offer 05. 替换空格

  • 分析:很简单,遍历+替换

  • 代码:

public String replaceSpace(String s) {
    String temp = new String();
    for(int i = 0; i < s.length(); i++){
        if(s.charAt(i) == ' '){
            temp += "%20";
        }else{
            temp += s.charAt(i);

        }
    }

    return temp;
}

151. 反转字符串中的单词

  • 分析:用栈来解决,首先将字符串用split做分割,注意Java中split分割空格后,会有""这种情况存在,如下图所示:

所以在遍历分割后的数组时,需要去除""的存在,否则会影响最后答案,最后将栈中元素弹出,做字符串拼接,注意当栈中只剩余一个元素时,不要在后面添加空格。

  • 代码:

public String reverseWords(String s) {
    Deque stack = new ArrayDeque<>();
    String[] s1 = s.split(" ");
    for(int i = 0; i < s1.length; i++){
        if(!"".equals(s1[i])){
            stack.push(s1[i]);
        }

    }
    String res = new String();
    while(!stack.isEmpty()){
        if(stack.size() == 1){
            res += stack.pop();
        }else{
            res += stack.pop();
            res += " ";
        }

    }

    return res;
}

剑指 Offer 58 - II. 左旋转字符串

  • 分析:分别记录0-n和n-s.length区间的字符串,最后相加即可得到答案。

  • 代码:

public String reverseLeftWords(String s, int n) {
    char[] s1 = s.toCharArray();
    String temp = new String();
    String temp2 = new String();
    for(int i = 0; i < n; i++){
        temp += s1[i];
    }
    for(int j = n; j < s.length();j++){
        temp2 += s1[j];
    }
    return temp2 + temp;
}

你可能感兴趣的:(代码随想录二刷笔记,算法,数据结构)