程式碼隨想錄演算法訓練營,9月4日 | 344.反轉字串,541. 反轉字串II,卡碼網:54.替換數字

漪欢酒發表於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);
    }
}

相關文章