🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。
✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。
🏃人生之义,在于追求,不在成败,勤通大道。加油呀!
🔥个人主页:Ethan Yankang
🔥推荐:史上最强八股文 || 一分钟看完我的上千篇博客
🔥温馨提示:划到文末发现专栏彩蛋 点击这里直接传送
🔥本篇概览:数据结构与算法 || 详细讲解了反转字符串、除去空格但又保留一个、再反转单个单词的算法,最后回顾了JAVA中的参数传递知识。🌈⭕🔥
目录
3.注意StringBuffer的setCharAt(int index,char c)用法
🌈序言
算法乃我长久之志也,此关必过。今日得此代码随想录之良品辅助,应按此路学之习之,而长久不可懈怠。
前一系列文章详细讲解了替换字符为数字的算法,建议先将这部分知识掌握之后再来学习本篇内容,点击查看。
🌈引出
有时候常常想去除中间的空格但又留下一个该怎么做?这道题是解决此类问题难得的好题。
主要是体会其中的流程控制思想,真的很优美。算法可以做到任何事情!!!就是从这题开始体悟到的。
题目: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个部分,不过你点击开后发现惊喜。)👇
💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖
热门专栏
💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖