代码随想录day07

本文介绍了Java中反转字符串的不同方法,包括双指针交换字符、按2k步长反转子串、单词反转以及右旋字符串操作。展示了使用双指针技巧、数组操作及正则逻辑处理字符串的实例。
摘要由CSDN通过智能技术生成

代码随想录day07

344.反转字符串

使用双指针的一个思想,让左右两个指针从字符串的两端出发,交换其对应的值,交换完成后,向中间靠拢,直至二者相遇

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

    }
}

541.反转字符串II

由于每次操作的字符串长度为2k的前k个字符,故遍历字符串时,以2k的进度遍历
确定操作的子串后进行反转操作
class Solution {
    public String reverseStr(String s, int k) {
        char[] c = s.toCharArray();
        for(int i=0;i<c.length;i += 2*k){
            int left = i;
            //min(c.lengh-1,left+k-1)
            //left+k-1为通过特例推理出的大小关系
            //length-1为right最远可移动到数组的右边间
            int right =Math.min(c.length-1,left+k-1);
            //在前k个字符这个边间内进行字符反转
            while(left < right){
                char num = c[left];
                c[left] = c[right];
                c[right] = num;
                left++;
                right--;
            }
        }
        return new String(c);
    }
}

替换数字

不正经解法,随便试了一下居然过了
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();

        for (int i = 0; i < ch.length; i++){
            if (ch[i] >= '0' && ch[i] <= '9'){
                 System.out.print("number");
            }else{
                 System.out.print(ch[i]);
            } 
        }      
    }
}

正经解法

import java.util.Scanner; 
  
public class Main {  
    public static void main(String[] args) {  
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine(); 
        // 初始化一个空字符串,用于存储处理后的结果 
        String result = "";  
        for (int i = 0; i < s.length(); i++) { // 遍历输入字符串的每个字符  
            char c = s.charAt(i); // 获取当前字符  
            if (Character.isDigit(c)) { // 判断当前字符是否为数字  
                result += "number"; // 如果是数字,则将"number"字符串拼接到结果字符串中  
            } else {  
                result += c; // 如果不是数字,则将当前字符拼接到结果字符串中  
            }
        }  
        System.out.println(result);
        sc.close();
    }  
}

151.反转字符串里的单词

使用双指针来寻找单词,然后将单词自后向前放入新字符串中以实现反转的目的

class Solution {
    public String reverseWords(String s) {
        // 删除首尾空格
        s = s.trim();                                    
        int j = s.length() - 1
        int i = j;
        StringBuilder res = new StringBuilder();
        while (i >= 0) {
            // 搜索首个空格
            while (i >= 0 && s.charAt(i) != ' ') i--;     
            res.append(s.substring(i + 1, j + 1) + " "); // 添加单词
            // 跳过单词间空格
            while (i >= 0 && s.charAt(i) == ' ') i--;     
            j = i;                                       
        }
        return res.toString().trim();                    
    }
}

右旋字符串

import java.util.*;

public class Main{
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String s = sc.next();
        
        StringBuilder res = new StringBuilder();
        res.append(s.substring(s.length() - n, s.length()));  
        res.append(s.substring(0, s.length() - n));
        System.out.println(res.toString());
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值