算法随想录day07 | 字符串part01

50 阅读2分钟

344.反转字符串

题目链接

题目很简单,直接头尾交换,逐步向中间靠拢即可。

class Solution {
    public void reverseString(char[] s) {
        if(s.length <= 1){
            return;
        }
        for(int i =0;i < s.length / 2;i++){
            char temp = s[i];
            s[i] = s[s.length-1-i];
            s[s.length - 1-i] = temp;
        }

        return;
    }
}

随想录讲解

文章链接 根据随想录讲解,这个方法本质是一种双指针。对于字符串,我们定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。

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

541. 反转字符串II

题目链接 文章链接 这道题我卡住的原因是题目一直没有理解,逻辑一直和例子对不上。经过随想录的讲解和二次理解,最后写出答案。

class Solution {
    public String reverseStr(String s, int k) {
        int left = 0;
        int right = k-1;
        char[] c = s.toCharArray();

        for(int i=0;i < s.length();i += (2*k)){
            if(i + k < s.length()){
                left = i;
                right = left + k -1;
                while(left < right){
                    char temp = c[left];
                    c[left] = c[right];
                    c[right] = temp;
                    left++;
                    right--;
                }
            }else{
                left = i;
                right = s.length() - 1;
                while(left < right){
                    char temp = c[left];
                    c[left] = c[right];
                    c[right] = temp;
                    left++;
                    right--;
                }
            }
        }

        return String.valueOf(c);

    }
    
}

卡码网:54.替换数字

题目链接 文章链接

这道题不是很难,主要是需要扩充空间,因此需要先得到需要扩充的空间大小。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.next();
        
        int cnt = 0;
        int len = s.length();
        for(int i=0;i < len;i++){
            if(Character.isDigit(s.charAt(i))){
                cnt++;
            }
        }
        
        int size = len + cnt * 5;
        char[] c = new char[size];
        int j =0;
        
        for(int i=0;i < len;i++){
            if(!Character.isDigit(s.charAt(i))){
                c[j] = s.charAt(i);
                j++;
            }else{
                c[j] = 'n';
                c[j+1] = 'u';
                c[j+2] = 'm';
                c[j+3] = 'b';
                c[j+4] = 'e';
                c[j+5] = 'r';
                j += 6;
            }
        }
        
        String res = new String(c);
        System.out.println(res);
        
    }
}