Reverse Words in a String

题:

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

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

题意:字符串反转(去除重复的空格)。

分析:

1,要求删除开头和结尾的多余空格。
2,如果两个单词之间有多余空格的话,也要删除。

一:两个指针,一个指针cur只顾着从右往左走,另一个指针wordEnd始终占据单词后面的那个空格,这样每次cur发现空格的时候substring(cur+1, wordEnd)就是该单词。需要注意的是,题目说得很明确,需要注意leading和trailing的空格要去掉,还有中间连续的空格需要变成一个,所以需要有判断条件wordEnd-1>cur,保证连续空格的情况下不会被写到字符串里面去,只有真正的单词出现的时候才需要append空格。

public class Solution {
    publicString reverseWords(String s) {
        intwordEnd = s.length();
        intcur = wordEnd - 1;
         
        StringBuilder sb =new StringBuilder();
         
        while(cur>=0) {
            if(s.charAt(cur)==' ') {
                if(wordEnd-1>cur) {
                    if(sb.length()>0)
                        sb.append(' ');
                    sb.append(s.substring(cur+1, wordEnd));
                }
                wordEnd = cur;
            }
             
            cur--;
        }
         
        if(wordEnd-1>cur) {
            if(sb.length()>0)
                sb.append(' ');
            sb.append(s.substring(0, wordEnd));
        }
 
        returnsb.toString();
    }
}


二:利用stack

实现

 
 public static void main(String[] args) {
        String str = "the sky is blue";
        Stack<string> stack = new Stack<>();

        String[] strArray = str.split(" ");

        for (String s : strArray) {
            stack.push(s);
        }

        StringBuilder sb = new StringBuilder();
        while (!stack.empty()) {
            sb.append(stack.pop()).append(" ");
        }

        System.out.println(sb);
    }

参考:http://blog.csdn.net/lanxu_yy/article/details/38827845


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值