Day 8 | 字符串 344.反转字符串 、541. 反转字符串II 、卡码网:54.替换数字 、151.翻转字符串里的单词 、卡码网:55.右旋转字符串

文章介绍了四种与字符串处理相关的Java编程问题:使用异或法实现字符串反转,通过循环和指针操作反转字符串、单词和数字,以及右旋转字符串。作者通过实例详细讲解了每种操作的思路和代码实现。
摘要由CSDN通过智能技术生成

344.反转字符串

题目
文章讲解
视频讲解
思路:异或法置换a与b(第一次接触,好神奇)
注意:void函数不需要return

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

541. 反转字符串II

题目
文章讲解
视频讲解
思路:

  1. 循环时,i每次向前走2k步:i+=2k
  2. 注意需要做一个end指针的位置判断,即剩余部分有可能不够k个
  3. s.toCharArray()是将字符串s转换为字符数组。该方法返回一个包含字符串s中所有字符的字符数组。
  4. 返回的应该是String
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(ch.length-1,start+k-1);//判断位数够不够k个,决定end指针的位置
            while(start<end){
                ch[start]^=ch[end];
                ch[end]^=ch[start];
                ch[start]^=ch[end];
                start++;
                end--;
            }
        }
        return new String(ch);
    }
}

卡码网:54.替换数字

题目
文章讲解


import java.util.Scanner; // 导入Scanner类,用于从标准输入流中读取数据

class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in); // 创建Scanner对象,用于接收用户输入
        String s = in.nextLine(); // 从用户输入中读取一行字符串
        StringBuilder sb = new StringBuilder(); // 创建一个StringBuilder对象,用于构建新的字符串
        for (int i = 0; i < s.length(); i++) { // 遍历输入字符串的每个字符
            if (Character.isDigit(s.charAt(i))) { // 判断当前字符是否为数字
                sb.append("number"); // 如果是数字,将"number"追加到StringBuilder中
            } else {
                sb.append(s.charAt(i)); // 如果不是数字,将当前字符追加到StringBuilder中
            }
        }
        System.out.println(sb); // 打印构建好的新字符串
    }
}

151.翻转字符串里的单词

题目
文章讲解
视频讲解
思路:

  1. 去除多余的空格
  2. 反转整个字符串
  3. 翻转单词
class Solution {
    public String reverseWords(String s) {
        StringBuilder sb= removeSpace(s);//去除首尾及中间空格
        reverseString(sb,0,sb.length()-1);//反转整个字符串
        reverseEachWord(sb);//反转各个单词
        return sb.toString();//toString()函数用于将其转换为普通的字符串对象。
    }

    private StringBuilder removeSpace(String s){
        int start=0;
        int end=s.length()-1;
        while(s.charAt(start)==' ') start++;
        while(s.charAt(end)==' ') end--;
        StringBuilder sb=new StringBuilder();
        while(start<=end){
            char c=s.charAt(start);
            if(c!=' '||sb.charAt(sb.length()-1)!=' ') sb.append(c);
            start++;
        }
        return sb;
    }

    public void reverseString(StringBuilder 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--;
        }
    }

    private void reverseEachWord(StringBuilder sb){
        int start=0;
        int end=1;
        int n=sb.length();
        while(start<n){
            while(end<n&&sb.charAt(end)!=' ') end++;
            reverseString(sb,start,end-1);
            start=end+1;
            end=start+1;
        }
    }
}
```java
class Solution {
    public String reverseWords(String s) {
        StringBuilder sb= removeSpace(s);//去除首尾及中间空格
        reverseString(sb,0,sb.length()-1);//反转整个字符串
        reverseEachWord(sb);//反转各个单词
        return sb.toString();//toString()函数用于将其转换为普通的字符串对象。
    }

    private StringBuilder removeSpace(String s){
        int start=0;
        int end=s.length()-1;
        while(s.charAt(start)==' ') start++; // 从字符串开头开始,找到第一个非空格字符的位置
        while(s.charAt(end)==' ') end--; // 从字符串末尾开始,找到第一个非空格字符的位置
        StringBuilder sb=new StringBuilder(); // 创建一个新的StringBuilder对象
        while(start<=end){ // 遍历整个字符串
            char c=s.charAt(start); // 获取当前位置的字符
            if(c!=' '||sb.charAt(sb.length()-1)!=' ') sb.append(c); // 如果当前字符不是空格,或者前一个字符不是空格,则将当前字符添加到StringBuilder中:当当前字符和上一个字符都是空格才停止加入
            start++; // 移动到下一个字符
        }
        return sb; // 返回去除空格后的StringBuilder对象
    }

    public void reverseString(StringBuilder 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--; // 移动指针
        }
    }

    private void reverseEachWord(StringBuilder sb){
        int start=0;
        int end=1;
        int n=sb.length();
        while(start<n){ // 遍历整个字符串
            while(end<n&&sb.charAt(end)!=' ') end++; // 找到当前单词的末尾位置
            reverseString(sb,start,end-1); // 反转当前单词
            start=end+1; // 移动到下一个单词的起始位置
            end=start+1; // 移动到下一个单词的末尾位置
        }
    }
}

大概捋清楚了过程,但是自己写还是很难

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

题目
文章讲解

import java.util.Scanner;
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();
        System.out.print(s.substring(s.length()-k));
        System.out.print(s.substring(0,s.length()-k));
    }
}

// 争取明天写完报告,争取明天开始先打卡后补题!!!

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向大蒜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值