【KOKO-代码随想录训练营Day 8|344|542|151|剑指Offer-左转】

KOKO-代码随想录算法训练营Day 8 | 344|541 |151



一、344.反转字符串

1.题目

https://leetcode.cn/problems/reverse-string/

2.代码

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

3.总结

二. 151.翻转字符串里的单词

1.题目:

https://leetcode.cn/problems/reverse-words-in-a-string/

2.代码

    public String reverseWords(String s) {
        //去首尾空格
        int l=0;
        int r=s.length()-1;
        while (l<r){
            while (s.charAt(l)==' '){
                l++;
            }
            while (s.charAt(r)==' '){
                r--;
            }
            break;
        }
        // 去中间空格
        s=s.substring(l,r+1);
        int slow=0,fast=0;
        StringBuilder sb1 = new StringBuilder(s);
        s=sb1.reverse().toString();
        char[] arr=s.toCharArray();
        StringBuilder sb=new StringBuilder();
        while (fast<s.length()){
            while (fast<s.length()&&s.charAt(fast)!=' '){
                fast++;
            }
            String str= reverseArr(arr,slow,fast-1);
            slow=fast+1;
            sb.append(str).append(" ");
            while (slow<s.length()&&s.charAt(slow)==' '){
                slow++;
            }
            fast=slow;

        }
        return sb.toString().substring(0,sb.length()-1);
    }

    private String reverseArr(char[] arr, int slow, int fast) {
        int a=slow;
        int b=fast;
        while (slow<fast){
            char temp=arr[slow];
            arr[slow]=arr[fast];
            arr[fast]=temp;
            slow++;
            fast--;
        }
        return String.valueOf(arr).substring(a,b+1);
    }

3.总结

三. 541. 反转字符串II

1.题目

https://leetcode.cn/problems/reverse-string-ii/

2.代码:

public String reverseStr(String s, int k) {
        int l=s.length();
        int sheng=l%(2*k);
        char[] arr=s.toCharArray();
        if(k>=l){
            reverseSt(arr,0,l-1);//数组,起始下标,终止下标
            return String.valueOf(arr);
        }
        if(sheng==l){
            reverseSt(arr,0,k-1);
            return String.valueOf(arr);
        }
        int offset=2*k;
        for (int i = 0; i < l; ) {
            if(i+offset>l){
                if(l-i>=k){
                    reverseSt(arr,i,i+k-1);
                    return String.valueOf(arr);
                }
                reverseSt(arr,i,l-1);
                return String.valueOf(arr);
                }
            reverseSt(arr,i,i+k-1);
            i+=offset;
        }
        return String.valueOf(arr);
    }

private void reverseSt(char[] arr, int i, int i1) {
        while (i<i1){
            char temp=arr[i];
            arr[i]=arr[i1];
            arr[i1]=temp;
            i++;
            i1--;
        }
    }

3.总结:

四. 剑指Offer58-II.左旋转字符串

1.题目:

https://leetcode.cn/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/

2.代码:

 public String dynamicPassword(String password, int target) {
        char[] arr=password.toCharArray();
        int len=arr.length-1;
        reverse(arr,0,len);
        reverse(arr,0,len-target);
        reverse(arr, len-target+1,len);
        return String.valueOf(arr);
    }

    private void reverse(char[] arr, int i, int j) {
        while (i<j){
            char temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
            i++;
            j--;
        }
    }

总结

五 剑指Offer 05.替换空格

题不见了,我直接用的replace

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值