代码随想录 算法训练营 d7 Leetcode344 反转字符串 Leetcode541 反转字符转2 替换数字54

Leetcode344 反转字符串

题目链接

双指针思想 交换字符即可

class Solution {
    public void reverseString(char[] s) {
        int l = 0;
        int r  = s.length-1;
        while(l<r){
            char tep = s[l];
            s[l] = s[r];
            s[r] = tep;
            l++;
            r--;
        }
    }
}

Leetcode541 反转字符转2

题目链接

讲解

理顺题目逻辑即可

每次直接跳入后2k个

根据剩余的字符判断反转的串

不足k个直接全部反转,不到2k大于k就反转前k个

class Solution {
    public String reverseStr(String s, int k) {
        char[] ch = s.toCharArray();
        // 1. 每隔 2k 个字符的前 k 个字符进行反转
        for (int i = 0; i< ch.length; i += 2 * k) {
            // 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
            if (i + k <= ch.length) {
                reverse(ch, i, i + k -1);
                continue;
            }
            // 3. 剩余字符少于 k 个,则将剩余字符全部反转
            reverse(ch, i, ch.length - 1);
        }
        return  new String(ch);
    }
    public void reverse(char[] ch, int i, int j) {
        for (; i < j; i++, j--) {
            char temp  = ch[i];
            ch[i] = ch[j];
            ch[j] = temp;
         }
}
}

替换数字54

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            if (Character.isDigit(s.charAt(i))) {
                sb.append("number");
            }else sb.append(s.charAt(i));
        }
        System.out.println(sb);
    }
}

 

posted @ 2024-06-13 10:58  lorange  阅读(21)  评论(0)    收藏  举报