大家好,今天我们来探讨一道经典的编程问题——翻转字符串里的单词。这个问题要求我们编写一个函数,将输入字符串中的所有单词进行翻转,但单词内部的字符顺序保持不变。
问题分析:
- 首先,我们需要理解翻转字符串里的单词并不是简单地翻转整个字符串,因为这样会导致单词内部的字符顺序也被翻转。
- 正确的做法是先翻转整个字符串,然后翻转每个单词。
算法实现:
以下是使用Java实现的代码示例:
class Solution {
public String reverseWords(String s) {
char[] chars=s.toCharArray();
chars=removeExtraSpaces(chars);
reverse(chars,0,chars.length-1);
reverseEachWords(chars);
return new String(chars);
}
public char[] removeExtraSpaces(char[] chars){
int slow=0;
for(int fast=0;fast<chars.length;fast++){
if(chars[fast]!=' '){
if(slow!=0){
chars[slow++]=' ';
}
while(fast<chars.length&&chars[fast]!=' '){
chars[slow++]=chars[fast++];
}
}
}
char[] newchars=new char[slow];
System.arraycopy(chars,0,newchars,0,slow);
return newchars;
}
public void reverse(char[] chars,int left,int right){
if(right>=chars.length){
return;
}
while(left<right){
char temp=chars[left];
chars[left]=chars[right];
chars[right]=temp;
left++;
right--;
}
}
public void reverseEachWords(char[] chars){
int start=0;
for(int end=0;end<=chars.length;end++){
if(end==chars.length||chars[end]==' '){
reverse(chars,start,end-1);
start=end+1;
}
}
}
}
代码解析:
移除多余空格
将整个字符串反转
将每个单词反转
举个例子,源字符串为:"the sky is blue "
移除多余空格 : “the sky is blue”
字符串反转:“eulb si yks eht”
单词反转:“blue is sky the”
这样我们就完成了翻转字符串里的单词。
总结:
通过这个简单的Java实现,我们可以有效地解决翻转字符串里的单词问题。这个问题不仅考察了字符串操作的基本技巧,也锻炼了我们对算法逻辑的理解和应用能力。
希望这篇文章对你有所帮助,如果你有任何问题或建议,请在评论区留言交流。
结束语:
感谢大家的阅读,如果你觉得这篇文章对你有帮助,请不要忘记点赞和分享哦!