[LeetCode]Reverse Words in a String 新题151

Given an input string, reverse the string word by word.

For example,
Given s = "the sky is blue",
return "blue is sky the".

这个题不难,结果我做的时候出现了TIME LIMIT EXCEED

之前是用栈做的,把每个单词push进去,pop出来,就是倒序了么,感觉算法肯定是O(n),就算testcase很长,怎么会报错呢。。

后来发现是用了String的问题,还是学得不精,大家可以搜下String和StringBuffer的区别

http://blog.csdn.net/yirentianran/article/details/2871417

这篇博客讲得挺清楚的,就是String 是final,不能继承,一旦创建出来了,e.g String s="sky"  不能更改了

那么在堆内存中就有个s ,内容是sky, 如果要s+=" is", 那么还得重新创建一个string,加上 is,最后成了 s="sky is"

这个过程其实就用了StringBuffer的append

所以在操作这样的字符串,最好还是用stringbuffer, 自己试验过了才发现stirng的操作相当耗时耗内存


public class Solution {
    public String reverseWords(String s) {
        Stack<String> st=new Stack<String>();
        int start=0;
        int end=s.length()-1;
        while(start<=s.length()-1&&s.charAt(start)==' '){
            start++;
        }
        while(end>=0&&s.charAt(end)==' '){
            end--;
        }
        if(start>end) return "";
        StringBuffer result= new StringBuffer();
        while(start<=end){
        	StringBuffer word=new StringBuffer();
        	while(end>=start&&s.charAt(end)!=' '){
        		word.append(s.charAt(end));end--;
        	}
        	word.reverse();
        	if(!word.equals("")) {result.append(word+" ");}
        	while(end>=start&&s.charAt(end)==' ') end--;
        }
        
        return result.substring(0,result.length()-1).toString();
       
        
    }
    
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值