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

文档讲解:344.反转字符串541. 反转字符串II卡码网:54.替换数字151.翻转字符串里的单词卡码网:55.右旋转字符串

题目链接:344.反转字符串541. 反转字符串II卡码网:54.替换数字151.翻转字符串里的单词卡码网:55.右旋转字符串

思路:

1、第一题可以用双指针的思想直接写出结果,是一道简单题。

2、第二题相较第一题较难,主要是对字符串和字符的转换还有区间的判断。首先将字符串转换为字符数组,遍历时每次i加2k个,每2k个处理一次,后返回字符数组转换的字符串。

3、第三题是卡码网上的题目,使用的是ACM模式提交代码,好久没有使用该模式,已经忘差不多了,过几天要把卡码网上前25个题刷一下熟悉熟悉ACM模式。该题是一个字符串处理的题目,使用到了Character.isDigit();其中Character常用方法有:

  1. compare (char x, char y):比较两个char类型的值,并返回它们的相对顺序。

  2. digit (char ch, int radix):根据给定的基数(radix)和字符(ch),返回该字符的整数表示。

  3. isDigit (char ch):判断指定字符是否是数字。

  4. isLetter(char ch):判断指定字符是否是字母。

  5. isLowerCase(char ch):判断指定字符是否是小写字母。

  6. isUpperCase(char ch):判断指定字符是否是大写字母。

  7. isWhitespace(char ch):判断指定字符是否是空白字符,如空格、制表符、换行符等。

  8. toLowerCase (char ch):将指定字符转换为小写字母。

  9. toUpperCase (char ch):将指定字符转换为大写字母。

  10. toString (char c):将指定字符转换为字符串。

4、第四题如果使用语言自带的方法来执行,就可以通过split分割字符串,再用双指针反转。但是不用split的话,需要先进行去空格,再将所有字符反转,再对每个单词进行反转,代码量比较多,但是最重要的是要思路清晰。

5、第五题首先想到的就是将字符串后n个先读取到StringBuffer,再将前length-n个读取到StringBuffer。题解给的是将整个字符串反转,再对前n个和后length-n个进行反转。

344.反转字符串

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--;
        }
    }
}

541. 反转字符串II

class Solution {
    public String reverseStr(String s, int k) {
        char[] ch = s.toCharArray();
        for(int i=0;i<ch.length;i+=2*k){
            char[] str = new char[k];
            if (i + k <= ch.length) {
                reverse(ch, i, i + k -1);
                continue;
            }
            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();
		StringBuffer sb = new StringBuffer();
		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);
	}

}

151.翻转字符串里的单词

class Solution {
    public String reverseWords(String s) {
        StringBuffer sb = removeSpace(s);
        reverseString(sb,0,sb.length()-1);
        reverseEachWord(sb);
        return sb.toString();
    }

    public StringBuffer removeSpace(String s){
        StringBuffer sb = new StringBuffer();
        int start=0;
        int end=s.length()-1;
        while(s.charAt(start) == ' '){
            start++;
        }
        while(s.charAt(end) == ' '){
            end--;
        }
        while(start<=end){
            char c = s.charAt(start);
            if(c !=  ' ' || sb.charAt(sb.length()-1) != ' '){
                sb.append(c);
            }
            start++;
        }
        return sb;
    }
    public void reverseString(StringBuffer sb, int start, int end){
        while(start<end){
            char temp = sb.charAt(start);
            sb.setCharAt(start,sb.charAt(end));
            sb.setCharAt(end,temp);
            start++;
            end--;
        }

    }
    public void reverseEachWord(StringBuffer sb){
        int start = 0;
        for(int i=0;i<sb.length();i++){
            if(sb.charAt(i) == ' '){
                reverseString(sb, start, i-1);
                start = i+1;
            }
        }
        reverseString(sb, start, sb.length()-1);
    }
}

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

import java.util.*;

class Main{
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        int num = Integer.parseInt(in.nextLine());
        String str = in.nextLine();
    
        StringBuffer sb = new StringBuffer();
    
        for(int i= str.length()-num; i<str.length(); i++){
            sb.append(str.charAt(i));
        }
        for(int i= 0; i<str.length()-num; i++){
            sb.append(str.charAt(i));
        }
        System.out.println(sb);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值