打卡第8天

打卡第8天

344.反转字符串

用双指针法,从两头不断收缩,java代码如下

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

541. 反转字符串II

用双指针法进行反转字符串,包装成一个函数来使用,然后for循环每一次加2k,如果i+k<size就进行反转前k位,java代码如下

class Solution {
    public String reverseStr(String s, int k) {
        char ch[] = s.toCharArray();
        int size = s.length();
        for(int i=0;i<size;i+=2*k){
            if(i+k<=size){
                reverseString(ch,i,i+k-1);
                continue;
            }
            reverseString(ch,i,size-1);
        }
        return new String(ch);
    }

    public void reverseString(char[] ch, int i, int j) {
        for (; i < j; i++, j--) {
            char temp  = ch[i];
            ch[i] = ch[j];
            ch[j] = temp;
        }
    }
}

剑指 Offer 05. 替换空格

还是使用双指针,但是这题涉及到了java的string扩容

首先用创建一个StringBuilder,然后用append()方法进行扩容

然后设置一个左指针,一个右指针,如果左指针等于空格,右指针就主键放上%20,java代码如下

class Solution {
    public String replaceSpace(String s) {
        //先把s扩容到每个空格变成%20的长度
        int size = s.length();
        //为了扩容使用StringBuilder
        StringBuilder str = new StringBuilder();
        for(int i=0;i<size;i++){
            if(s.charAt(i)==' '){
                str.append("  ");
            }
        }
        //对s进行扩容
        s+=str.toString();
        //设置左右指针
        int left = size - 1;
        int right = s.length() - 1;
        //转化成chars方便操作
        char[] chars = s.toCharArray();
        while(left>=0){
            if(chars[left]!=' '){
                chars[right] = chars[left];
            }
            else{
                chars[right]='0';
                right--;
                chars[right]='2';
                right--;
                chars[right]='%';
            }
            left--;
            right--;
        }
        return new String(chars);
    }
}

151.反转字符串中的单词

记录一下我的思路,但是没写完,明天再看看吧

class Solution {
    public String reverseWords(String s) {
        int left=0;
        int right=0;
        int size = s.length();
        char[] chars = s.toCharArray();
        char[] result = new char[size];
        //去掉前导空格
        while(chars[right]==' '){
            right++;
        }
        while(right<size){
            if(chars[right]!=' '){
                right++;
            }
            else{
                //去掉多余空格
                while(chars[left]==' '){
                    left++;
                }
                for(;left<=right;left++){
                    
                }
                left++;
                right++;
            }
        }
        return new String(result);
    }
}

剑指 Offer 58 - II. 左旋转字符串

先把n之前的反转了,再把n之后的反转了,然后一起反转了即可,java代码如下

class Solution {

    public String reverseLeftWords(String s, int n) {
        int size=s.length();
        char[] ch = s.toCharArray();
        reverseString(ch,0,n-1);
        reverseString(ch,n,size-1);
        reverseString(ch,0,size-1);
        return new String(ch);
    }

    public void reverseString(char[] ch, int start, int end) {
        for(;start<end;start++,end--){
            char temp = ch[start];
            ch[start] = ch[end];
            ch[end] = temp;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值