代码随想录训练营Day8

49 阅读1分钟

344.反转字符串 leetcode.com/problems/re…

思路:这道题就比较简单了,典型的双指针,然后按个交换就行了

class Solution {
    public void reverseString(char[] s) {
        int left = 0;
        int right = s.length - 1;
        while (left < right) {
            swap(left,right, s);
            left++;
            right--;
        } 

    }

    private void swap(int left, int right, char[] s) {
        char tmp = s[left];
        s[left] = s[right];
        s[right] = tmp;
    }
}
  1. 反转字符串II leetcode.com/problems/re…
class Solution {
    public String reverseStr(String s, int k) {
        char[] c = s.toCharArray();
        // 1. 每隔 2k 个字符的前 k 个字符进行反转
        for (int i = 0; i< c.length; i += 2 * k) {
            // 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
            if (i + k <= c.length) {
                reverse(c, i, i + k -1);
                continue;
            }
            // 3. 剩余字符少于 k 个,则将剩余字符全部反转
            reverse(c, i, c.length - 1);
        }
        return  new String(c);

    }
    public void reverse(char[] c, int i, int j) {
    for (; i < j; i++, j--) {
        char temp  = c[i];
        c[i] = c[j];
        c[j] = temp;
    }

    }
}

替换数字 kamacoder.com/problempage…

思路:遍历字符串寻找数字的数量,扩充字符串的长度为数字替换为number之后的长度,定义两个指针,一个指向原来字符串的末尾,一个指向新长度字符串的末尾,然后按个替换

// 为了还原题目本意,先把原数组复制到扩展长度后的新数组,然后不再使用原数组、原地对新数组进行操作。
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);
    }
}