代码随想录36——字符串4——整体翻转+局部翻转+负负得正1——翻转字符串里的单词

🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。

✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。
🏃人生之义,在于追求,不在成败,勤通大道。加油呀!

🔥个人主页:Ethan Yankang
🔥推荐:史上最强八股文 || 一分钟看完我的上千篇博客

🔥温馨提示:划到文末发现专栏彩蛋   点击这里直接传送

🔥本篇概览:数据结构与算法 || 详细讲解了反转字符串、除去空格但又保留一个、再反转单个单词的算法,最后回顾了JAVA中的参数传递知识。🌈⭕🔥



目录

🌈序言

🌈引出

题目:151.翻转字符串里的单词

剖析题干重点:

🔥思路分析:

🌈最终代码:

今日问题:

🔥今日总结:

基础掌握不老实,对象引用等知识点掌握不牢实。

1.🔥核心点:

1.JAVA中普值对引

2.值传递与引用传递

3.引自原文:

 2.🔥记住核心代码:

3.注意StringBuffer的setCharAt(int index,char c)用法


🌈序言

算法乃我长久之志也,此关必过。今日得此代码随想录之良品辅助,应按此路学之习之,而长久不可懈怠。

前一系列文章详细讲解了替换字符为数字的算法,建议先将这部分知识掌握之后再来学习本篇内容,点击查看。


🔥 代码随想录35——字符串3——替换数字-CSDN博客

🔥 代码随想录系列所有算法精讲一键查阅


🌈引出

有时候常常想去除中间的空格但又留下一个该怎么做?这道题是解决此类问题难得的好题。

主要是体会其中的流程控制思想,真的很优美。算法可以做到任何事情!!!就是从这题开始体悟到的。


题目:151.翻转字符串里的单词

给定一个字符串,逐个翻转字符串中的每个单词。

示例 1:
输入: "the sky is blue"
输出: "blue is sky the"

示例 2:
输入: "  hello world!  "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

示例 3:
输入: "a good   example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。


剖析题干重点:

最重点的就是去除中间字符串但又还留一个的逻辑,其实只要这样就好了——
if(s.charAt(i)!=' '||sb.charAt(sb.length()-1)!=' ')

🔥思路分析:

其实思路是比较清晰的,三大步即可:

1.去除原本字符串中的头尾空格以及中间单词的多余的空格。

2.将所有字符串全部翻转过来

3.将字符串的所有单词再翻转过来。


🌈最终代码:

   /**
     * 不使用Java内置方法实法
     * 1.去除首尾以及中间多余空格
     * 2.反转整个字符串
     * 3.反转各个单词
     */


  class Solution {
        public String reverseWords(String s) {

        // 1.去除首尾以及中间多余空格
        StringBuilder sb = removeSpace(s);
        // 2.反转整个字符串
        reverseString(sb, 0, sb.length() - 1);
        // 3.反转各个单词
        reverseEachWord(sb);
        return sb.toString();
    }

    private StringBuilder removeSpace(String s) {
        int start = 0;
        int end = s.length() - 1;
        while (s.charAt(start) == ' ') start++;
        while (s.charAt(end) == ' ') end--;
        StringBuilder sb = new StringBuilder();
        while (start <= end) {
            char c = s.charAt(start);
            if (c != ' ' || sb.charAt(sb.length() - 1) != ' ') {
            sb.append(c);
            }
            start++;
        }

        return sb;
    }

    /**
     * 反转字符串指定区间[start, end]的字符
     */
    public void reverseString(StringBuilder sb, int start, int end) {
        while (start < end) {
            char temp = sb.charAt(start);
            sb.setCharAt(start, sb.charAt(end));
            sb.setCharAt(end, temp);
            start++;
            end--;
        }
    }

    private void reverseEachWord(StringBuilder sb) {
        int start = 0;
        int end = 1;
        int n = sb.length();
        while (start < n) {
            while (end < n && sb.charAt(end) != ' ') {
                    end++;
            }
            reverseString(sb, start, end - 1);
            start = end + 1;
            end = start + 1;
        }
    }
}

今日问题:


🔥今日总结:

基础掌握不老实,对象引用等知识点掌握不牢实。

这是JAVA对象引用的知识点:


1.🔥核心点:

1.JAVA中普值对引

1.传递的参数如果是普通类型,那就是值传递,如果是对象,那就是引用传递


2.值传递与引用传递

值传递(pass by value)是指在函数调用时,将实参的值复制一份给形参,函数内部对形参的修改不会影响到原始实参的值。


引用传递(pass by reference)是指在函数调用时,将实参的引用(地址)传递给形参,函数内部对形参的修改会影响到原始实参的值。



简单来说,值传递是对实参进行拷贝,函数内部的操作不会影响到原始实参;而引用传递是对实参的引用进行操作,函数内部的修改会影响到原始实参。

3.引自原文:

java 的参数传递_java函数作为参数传递-CSDN博客

 2.🔥记住核心代码

if(s.charAt(i)!=' '||sb.charAt(sb.length()-1)!=' ')

3.注意StringBuffer的setCharAt(int index,char c)用法

sb.setCharAt(start, sb.charAt(end));
            sb.setCharAt(end, temp);



📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤收藏✅ 评论💬,大佬三连必回哦!thanks!!!
📚愿大家都能学有所得,功不唐捐!

👇下面是专栏彩蛋系列,你会喜欢的!(为了避免影响算法的简洁与优美,这里直接将之前的几十个专栏简化为3个部分,不过你点击开后发现惊喜。)👇


💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖

热门专栏

🌈🌈专栏彩蛋系列

🌈🌈史上最全八股文,欢迎收藏

🌈🌈一篇文章了解我的上千篇博客

💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值