代码随想录算法训练营第8天 | 344.反转字符串 541. 反转字符串II 卡码网:54.替换数字 151.翻转字符串里的单词 卡码网:55.右旋转字符串

55 阅读2分钟

344.反转字符串

题目链接/文章讲解/视频讲解:programmercarl.com/0344.%E5%8F…

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

541. 反转字符串II

题目链接/文章讲解/视频讲解:programmercarl.com/0541.%E5%8F…

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(start + k - 1, ch.length - 1);
            while(start < end){
                char temp = ch[start];
                ch[start] = ch[end];
                ch[end] = temp;
                start++;
                end--;
            }
        }
        return new String(ch);
    }
    
}

卡码网:54.替换数字

题目链接/文章讲解:programmercarl.com/kama54.%E6%…

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        char[] ch = s.toCharArray();
        
        int cnt = 0;
        for(int i = 0; i < ch.length; i++){
            if(ch[i]>= '0' && ch[i] <= '9'){
                cnt++;
            }
        }
        
        char[] res = new char[ch.length + cnt * 5];
        int p = 0;
        for(int i = 0; i < ch.length; i++){
            if(ch[i] >= '0' && ch[i] <= '9'){
                res[p++] = 'n';
                res[p++] = 'u';
                res[p++] = 'm';
                res[p++] = 'b';
                res[p++] = 'e';
                res[p++] = 'r';
            }else{
                res[p++] = ch[i]; 
            }
        }
        String ans = new String(res);
        System.out.println(ans);
    }
}

另外还可以使用Java的stringbuilder进行解决,直接在查找到数字的地方加入‘number’即可。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if (ch >= '0' && ch <= '9') {
                // 如果是数字字符,添加 "number" 到 StringBuilder
                sb.append("number");
            } else {
                // 如果不是数字字符,直接添加该字符
                sb.append(ch);
            }
        }

        String ans = sb.toString();
        System.out.println(ans);
    }
}

151.翻转字符串里的单词

题目链接/文章讲解/视频讲解:programmercarl.com/0151.%E7%BF…

这道题有许多解法

class Solution {
    public String reverseWords(String s) {
        StringBuilder res = new StringBuilder();
        int p = s.length() - 1;

        while(p >= 0){
            //跳过空格
            while(p >= 0 && s.charAt(p) == ' ') p--;

            //找单词开头
            int end = p;
            if(p < 0) break;
            while(p >= 0 && s.charAt(p) != ' ') p--;

            if(res.length() > 0) res.append(' ');
            res.append(s.substring(p + 1, end + 1));
            
        }
        return res.toString();
    }
}

卡码网:55.右旋转字符串

题目链接/文章讲解:

programmercarl.com/kama55.%E5%…

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int k =  sc.nextInt();
        sc.nextLine();
        String s = sc.nextLine();
        int n = s.length();
        k = k% s.length();
        char[] rotated = new char[n];
        for (int i = 0; i < n; i++) {
            rotated[(i + k) % n] = s.charAt(i);
        }
        String res = new String(rotated);
        System.out.println(res);
        sc.close();
        
    }
}