力扣151题:翻转字符串里的单词的Java实现

大家好,今天我们来探讨一道经典的编程问题——翻转字符串里的单词。这个问题要求我们编写一个函数,将输入字符串中的所有单词进行翻转,但单词内部的字符顺序保持不变。

问题分析:

  1. 首先,我们需要理解翻转字符串里的单词并不是简单地翻转整个字符串,因为这样会导致单词内部的字符顺序也被翻转。
  2. 正确的做法是先翻转整个字符串,然后翻转每个单词。

算法实现:

以下是使用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实现,我们可以有效地解决翻转字符串里的单词问题。这个问题不仅考察了字符串操作的基本技巧,也锻炼了我们对算法逻辑的理解和应用能力。

希望这篇文章对你有所帮助,如果你有任何问题或建议,请在评论区留言交流。

结束语:

感谢大家的阅读,如果你觉得这篇文章对你有帮助,请不要忘记点赞和分享哦!


  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值