代码随想录算法训练营,9月4日 | 344.反转字符串,541. 反转字符串II,卡码网:54.替换数字

wowoioo / 2024-09-05 / 原文

leetcode 344.反转字符串
题目链接:leetcode 344.反转字符串
文档讲解︰代码随想录(programmercarl.com)
视频讲解︰反转字符串
日期:2024-09-04

想法:用临时值保存左边,左右互换就行了。
Java代码如下:

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

总结:与链表相比,字符串的操作更像数组。

leetcode 541. 反转字符串II
题目链接:leetcode 541. 反转字符串II
文档讲解︰代码随想录(programmercarl.com)
视频讲解︰反转字符串II
日期:2024-09-04

想法:起始位置每次增加2k,反转位置为i+k-1,但要注意最后面剩余长度不足k的情况,直接比较最后一个字符的位置和反转位置的大小就行了
Java代码如下:

class Solution {
    public String reverseStr(String s, int k) {
        char[] ch = s.toCharArray();
        for(int i = 0;i < ch.length;i += 2 * k){
            int start = i;
            int end = Math.min(ch.length - 1,start + k - 1);
            while(start < end){
                char temp = ch[start];
                ch[start] = ch[end];
                ch[end] = temp;
                start++;
                end--;
            }
        }
        return new String(ch);
    }
}

卡码网:54.替换数字
题目链接:卡码网:54.替换数字
文档讲解︰代码随想录(programmercarl.com)
日期:2024-09-04

想法:扫描字符串中的数字,扫到了,将长度增长5(为了放'number'),直接可以新定义一个增长的字符串,然后从后往前将字母一一填进去。
Java代码如下:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int len = s.length();
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) >= 0 && s.charAt(i) <= '9') {
                len += 5;
            }
        }
        
        char[] ret = new char[len];
        for (int i = 0; i < s.length(); i++) {
            ret[i] = s.charAt(i);
        }
        for (int i = s.length() - 1, j = len - 1; i >= 0; i--) {
            if ('0' <= ret[i] && ret[i] <= '9') {
                ret[j--] = 'r';
                ret[j--] = 'e';
                ret[j--] = 'b';
                ret[j--] = 'm';
                ret[j--] = 'u';
                ret[j--] = 'n';
            } else {
                ret[j--] = ret[i];
            }
        }
        System.out.println(ret);
    }
}