代码随想录算法训练营第八天 | 344.反转字符串 、541. 反转字符串II、 151.翻转字符串里的单词

本文介绍了多种关于字符串反转的编程问题,包括基本的reverse函数应用、字符串数组的反转、字符串中单词的反转以及右旋转字符串,强调了不同场景下使用库函数和自定义方法的策略。
摘要由CSDN通过智能技术生成

344.反转字符串

建议: 本题是字符串基础题目,就是考察 reverse 函数的实现,同时也明确一下 平时刷题什么时候用 库函数,什么时候 不用库函数

class Solution {
    public void reverseString(char[] s) {
        int len=s.length;
        // System.out.println(len);
        int j=len-1;
        for(int i=0;i<len/2;i++,j--){
            char tmp=s[i];
            s[i]=s[j];
            s[j]=tmp;
        }
    }
}

541. 反转字符串II

建议:本题又进阶了,自己先去独立做一做,然后在看题解,对代码技巧会有很深的体会。

好难,不懂,到时候复盘。

class Solution {
    public String reverseStr(String s, int k) {
        char[] ch=s.toCharArray();
        // 比如ch是’abcdefg',i一开始是0,k是2,然后i是4
        //第一轮反转索引0到1,
        for (int i=0;i<ch.length;i=i+2*k){//i指针以2k的步长移动
            // reverse(ch,i,i+k-1);
            if(i+k<=ch.length){
                reverse(ch,i,i+k-1);
                continue;
            }
                reverse(ch,i,ch.length-1);
        }
        String str=new String(ch);
        return str;

    }
    //反转ch字符串i到j范围内的,例子i,j分别是0,3,ch里的’abcd‘就变成’dcba‘
    public void reverse(char[] ch,int i,int j){
        for(;i<j;i++,j--){
            char tmp=ch[i];
            ch[i]=ch[j];
            ch[j]=tmp;
        }
    }
}

卡码网:54.替换数字

建议:对于线性数据结构,填充或者删除,后序处理会高效的多。好好体会一下。
题目链接/文章讲解:https://programmercarl.com/kama54.%E6%9B%BF%E6%8D%A2%E6%95%B0%E5%AD%97.html

151.翻转字符串里的单词

这题偷懒了。使用split库函数,分隔单词,然后定义一个新的string字符串,最后再把单词倒序相加。
但其实有更深的解法
https://www.bilibili.com/video/BV1uT41177fX/?spm_id_from=333.788&vd_source=8a9c6e24d3474685bf451d352e7e1565

class Solution {
    public String reverseWords(String s) {
        String word=s.trim();
        String[] words=word.split("\\s+");
        // System.out.println(word);
        // for(String i:words){
        //     System.out.println(i);
        // }
        int left=0,right=words.length-1;
        while(left<right){
            String tmp=words[left];
            words[left]=words[right];
            words[right]=tmp;
            left++;
            right--;
        }
        return String.join(" ",words);
    }
}

卡码网:55.右旋转字符串

建议:题解中的解法如果没接触过的话,应该会想不到

题目链接/文章讲解:
https://programmercarl.com/kama55.%E5%8F%B3%E6%97%8B%E5%AD%97%E7%AC%A6%E4%B8%B2.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值