leecode151. 翻转字符串里的单词

151. 翻转字符串里的单词

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

示例 1:

输入: “the sky is blue”
输出: “blue is sky the”
示例 2:

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

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

说明:

无空格字符构成一个单词。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

进阶:

请选用 C 语言的用户尝试使用 O(1) 额外空间复杂度的原地解法。

class Solution {
    public String reverseWords(String s) {
        int n=s.length();
        StringBuilder str=new StringBuilder();
        for(int i=n-1;i>=0;){
            while(i>=0&&s.charAt(i)==' '){
                i--;
            }
            if(i<0){
                break;
            }
            int j=i;
            while(j>=0&&s.charAt(j)!=' '){
                j--;
            }
            str.append(s.substring(j+1,i+1));//substring() 方法返回的子串包括 start 处的字符,但不包括 stop 处的字符
            str.append(' ');
            i=j;
        }
        int m=str.length();
        if(m>0){
            str.delete(m-1,m);
        }
        return str.toString(); 
    }
}

执行用时:3 ms
内存消耗:39.8 MB
试了好多方法,还是这个评论区大神的方法的用时和内存消耗比较小,本来看到50%左右的排名还觉得应该有更好的方法,没想到官方解还不如这个,hhhh而且感觉这个比较好理解。我个菜菜也可以get!开心!
但是有一点就是同时定义和不定义m和n用时都是3ms,一直觉得这种length定义的话时间消耗好像会少点呢。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值