day8 || 344.反转字符串 541.反转字符串|| 剑指offer.05.替换空格 151.反转字符串里的单词 剑指offer58.|| 左旋转字符串

本文展示了多种字符串操作的代码示例,包括使用双指针和异或运算实现的字符串反转,按步长反转字符串,替换空格为%20,以及反转字符串中的单词。这些方法利用了字符数组和StringBuilder等数据结构,高效地实现了字符串的变换。
摘要由CSDN通过智能技术生成

344.反转字符串

代码示例

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

心得体会

双指针,将左右指针分别指向字符串的首尾,然后在循环中交换两个指针所指向的字符,直到左指针大于等于右指针为止。具体来说,交换两个字符的方法是使用异或运算,将两个字符的ASCII码进行异或,得到的结果再异或其中一个字符,最后再异或另一个字符,就可以完成交换。

541.反转字符串||

代码示例

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);
            while(start < end){
                ch[start]^ = ch[end];
                ch[end]^ = ch[start];
                ch[start]^ = ch[end];
                start++;
                end--;
            }
        }
        return new String(ch);
    }
}

心得体会

使用char数组将字符串转换为可变形式。然后,以2k的步长迭代数组,其中k是给定的组大小。对于每个组,基于当前索引和组大小设置起始和结束指针。然后,交换反转组中的字符。最后,将修改后的char数组作为字符串返回。

剑指offer.05.替换空格

代码示例

class Solution {
    public String replaceSpace(String s) {
        StringBuilder res = new StringBuilder();
        for(Character c : s.toCharArray())
        {
            if(c == ' ') res.append("%20");
            else res.append(c);
        }
        return res.toString();
    }
}

心得体会

replaceSpace方法接受一个字符串s作为参数,并返回一个新的字符串,其中所有空格都被替换为"%20"。它使用一个StringBuilder对象来构建新字符串,遍历输入字符串中的每个字符,如果字符是空格,则将"%20"添加到StringBuilder中,否则将字符本身添加到StringBuilder中。最后,它将StringBuilder转换为一个字符串并返回。

151.反转字符串里的单词

代码示例

class Solution {
    public String reverseWords(String s) {
        //源字符数组
        char[] initialArr = s.toCharArray();
        //新字符数组
        char[] newArr = new char[initialArr.length+1];
        int newArrPos = 0;
        int i = initialArr.length-1;
        while(i>=0){
            while(i>=0 && initialArr[i] == ' '){i--;}  
            int right = i;
            while(i>=0 && initialArr[i] != ' '){i--;} 
            for (int j = i+1; j <= right; j++) {
                newArr[newArrPos++] = initialArr[j];
                if(j == right){
                    newArr[newArrPos++] = ' ';
                }
            }
        }
        if(newArrPos == 0){
            return "";
        }else{
            return new String(newArr,0,newArrPos-1);
        }
    }
}

心得体会

reverseWords 方法接收一个字符串参数 s,并返回反转后的字符串。该方法首先将字符串转换为字符数组 initialArr,然后创建一个新的字符数组 newArr,用于存储反转后的字符串。接下来,代码从字符串的末尾开始遍历,跳过空格并记录单词的边界,然后将每个单词添加到 newArr 中,并在每个单词的末尾添加一个空格。最后,如果 newArr 中没有任何字符,则返回空字符串,否则返回 newArr 中从索引0到末尾空格索引前的字符数组(转换为字符串)。

剑指offer58.|| 左旋转字符串

代码示例

class Solution {
    public String reverseLeftWords(String s, int n) {
        StringBuilder res = new StringBuilder();
        for(int i = n; i < s.length(); i++)
            res.append(s.charAt(i));
        for(int i = 0; i < n; i++)
            res.append(s.charAt(i));
        return res.toString();
    }
}

心得体会

reverseLeftWords方法接受两个参数:一个字符串s和一个整数n。该方法返回一个新字符串,该字符串是将原始字符串s中前n个字符移动到字符串的末尾得到的。该方法使用StringBuilder类来构建新字符串。它首先从原始字符串的第n个字符开始迭代,将每个字符添加到StringBuilder中。然后,它从原始字符串的开头开始迭代,将前n个字符添加到StringBuilder中。最后,它将StringBuilder转换为字符串并返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值