代码随想录算法训练营第8天 | 344.反转字符串、541. 反转字符串II、剑指Offer 05.替换空格、151.翻转字符串里的单词、剑指Offer58-II.左旋转字符串

文章介绍了在LeetCode中处理字符串的三个问题:反转字符串、替换空格和左旋转字符串。通过Java代码展示了如何使用循环、数组操作和StringBuilder来解决这些问题,包括特殊情况的处理。
摘要由CSDN通过智能技术生成

题目链接:344. 反转字符串 - 力扣(LeetCode)

class Solution {
    public void reverseString(char[] s) {
        for(int i = 0; i < s.length/2; i ++){
            char temp = s[i];
            s[i] = s[s.length - 1 - i];
            s[s.length - 1 - i] = temp;
        }
        return;
    }
}

很基础的一道题,重点是循环数组的一半就可以了

题目链接:541. 反转字符串 II - 力扣(LeetCode)

class Solution {
    public String reverseStr(String s, int k) {
        char[] strArr = s.toCharArray();
        for(int i = 0; i < strArr.length; i = i + 2*k){
            if(i + k <= strArr.length){
                reverse(strArr, i, i + k);
                continue;
            }
            reverse(strArr, i, strArr.length);
        }
        return String.valueOf(strArr);
    }
    public void reverse(char[] s, int start, int end){
        for(int i = start; i < (i + end)/2; i++){
            char temp = s[i];
            s[i] = s[end - 1];
            s[end - 1] = temp;
            end --;
        }
    }
}

主要在于i循环时的增量以及传参数时边界的判定

题目链接:替换空格_牛客题霸_牛客网 (nowcoder.com)

public class Solution {
    public String replaceSpace (String s) {
        if(s == null || s.length() == 0){
            return s;
        }
        StringBuilder str = new StringBuilder();
        for(int i = 0; i < s.length(); i ++){
            if(s.charAt(i) == ' '){
                str.append("%20");
            }else{
                str.append(s.charAt(i));
            }   
        }
        return str.toString();
    }
}

一种直接创建一个StringBuilder对象,正向遍历,另外一种方法是先算出总共的空格数量,然后扩充数组,再进行倒着双指针遍历填入"%20"

题目链接:左旋转字符串_牛客题霸_牛客网 (nowcoder.com)

public class Solution {
    public String LeftRotateString (String str, int n) {
        if(str == null || str.length() == 0){
            return str;
        }
        if(str.length() <= n){
            if(n % str.length() == 0){
                return str;
            }else{
                StringBuilder sb = new StringBuilder();
                for(int i = n % str.length(); i < str.length(); i ++){
                    sb.append(str.charAt(i));
                }
                for(int j = 0; j < n % str.length(); j ++){
                    sb.append(str.charAt(j));
                }
                return sb.toString();
            }
        }else{
            StringBuilder sb = new StringBuilder();
                for(int i = n; i < str.length(); i ++){
                    sb.append(str.charAt(i));
                }
                for(int j = 0; j < n; j ++){
                    sb.append(str.charAt(j));
                }
                return sb.toString();
            }
    }
}

更简单的方法是先翻转n前面的字符串,再翻转n后面的字符串,最后再把整个字符串翻转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值