leetcode-Reverse Words in a String 反向输出字符串
Posted on 2014-05-24 13:45 bekitty 阅读(762) 评论(0) 编辑 收藏 举报题目地址 https://oj.leetcode.com/problems/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
".
Clarification:
- What constitutes a word?
A sequence of non-space characters constitutes a word. - Could the input string contain leading or trailing spaces?
Yes. However, your reversed string should not contain leading or trailing spaces. - How about multiple spaces between two words?
Reduce them to a single space in the reversed string.
对于本题,网上好多方法用split,而对split方法的内部结构不了解的话,很容易出错误。
由于题目中要求输出中不允许包含开头和结尾的空格,并且输出时单词中间的空格要被缩减为一个,所以想到了计算出单词的数量后,用ArrayList保存每个单词,反向遍历输出即可。
package edu.bupt.cici.leetcode; import java.util.ArrayList; public class ReverseWordsInAString { ArrayList<String> word = new ArrayList<String>(); public String reverseWords(String s) { int wordNum = calWordNum(s); StringBuffer sb = new StringBuffer(); for (int i = 0; i < wordNum; i++) { sb.append(word.get(wordNum - i - 1)); if (i != wordNum - 1) { sb.append(" "); } } return sb.toString(); } private int calWordNum(String s) { // TODO Auto-generated method stub int cursor = 0; int wordNum = 0; StringBuffer sb = new StringBuffer(); for (int i = 0; i < s.length(); i++) { if (i == 0) { if (s.charAt(i) == ' ') { continue; } else if(s.length()!= 1){ sb.append(s.charAt(i)); cursor++; }else if(s.length() ==1){ sb.append(s.charAt(i)); word.add(sb.toString()); wordNum++; } } else if (i == s.length() - 1) { if (s.charAt(i) == ' ') { if (cursor != 0) { wordNum++; word.add(sb.toString()); } } else { if (cursor == 0) { wordNum++; sb.append(s.charAt(i)); word.add(sb.toString()); } else { sb.append(s.charAt(i)); word.add(sb.toString()); wordNum++; } } } else { if (s.charAt(i) == ' ') { if (cursor == 0) { continue; } else if (cursor != 0) { cursor = 0; wordNum++; word.add(sb.toString()); sb.delete(0, sb.length()); } } else { sb.append(s.charAt(i)); cursor++; } } } return wordNum; } public static void main(String[] args) { // TODO Auto-generated method stub String s = "the sky is blue"; ReverseWordsInAString rw = new ReverseWordsInAString(); System.out.println(rw.reverseWords(s)); } }