您的位置:首页 > 其它

leetcode之反转给定字符串中的单词

2014-07-17 15:17 232 查看
原题出自:


LeetCode Online Judge

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.

我的解答:

public class Solution {
public String reverseWords(String s) {
//clear redundant spaces
StringBuffer sb = new StringBuffer(s.trim());
for(int i=1;i < sb.length() - 1;i++)
if(sb.charAt(i-1) == ' ' && sb.charAt(i) == ' '){
sb.deleteCharAt(i-1);
i--;
}
//cut words
String[] sa = sb.toString().split(" ");
if(sa.length == 0)
return "";
//reverse word by word
int len = sa.length;
String tmp = null;
for(int i=0;i < len / 2;i++){
tmp = sa[i];
sa[i] = sa[(len - 1) - i];
sa[(len - 1) - i] = tmp;
}
//recombine string
String result = new String(sa[0]);
for(int i=1;i < sa.length;i++)
result += " " + sa[i];

return result;
}
}


总结:

1.StringBuffer类的deleteCharAt(int index),用于删除字符串中下标为index的字符。

2.String类的" ".split(" ")的返回值为0,但"a b".split(" ")的返回值为3,其中切割后的第二个字符串为"",可以理解为split之前先进行trim(),然后再切词,其中两个空格相连的位置会切出一个""串。

3.反转字符串之时,若字符串长度为2x,则按上面的方式遍历字符串刚好到x,但不包括x。当字符串长为2x+1时,也只要x就好。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: