代码随想录算法训练营第八天 | 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
    评论
代码随想录算法训练营是一个优质的学习和讨论平台,提供了丰富的算法训练内容和讨论交流机会。在训练营中,学员们可以通过观看视频讲解来学习算法知识,并根据讲解内容进行刷题练习。此外,训练营还提供了刷题建议,例如先看视频、了解自己所使用的编程语言、使用日志等方法来提高刷题效果和语言掌握程度。 训练营中的讨论内容非常丰富,涵盖了各种算法知识点和解题方法。例如,在第14天的训练营中,讲解了二叉树的理论基础、递归遍历、迭代遍历和统一遍历的内容。此外,在讨论中还分享了相关的博客文章和配图,帮助学员更好地理解和掌握二叉树的遍历方法。 训练营还提供了每日的讨论知识点,例如在第15天的讨论中,介绍了层序遍历的方法和使用队列来模拟一层一层遍历的效果。在第16天的讨论中,重点讨论了如何进行调试(debug)的方法,认为掌握调试技巧可以帮助学员更好地解决问题和写出正确的算法代码。 总之,代码随想录算法训练营是一个提供优质学习和讨论环境的平台,可以帮助学员系统地学习算法知识,并提供了丰富的讨论内容和刷题建议来提高算法编程能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [代码随想录算法训练营每日精华](https://blog.csdn.net/weixin_38556197/article/details/128462133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值