没啥难的,难点在于各种带空格的edge cases.
然后 按空格分是
str.split("s+");
public String reverseWords(String s)
{
if(s == null) return null;
s = s.trim();
if(s.length() == 0) return "";
int length = s.split("\s+").length;
StringBuilder[] sbArray = new StringBuilder[length];
StringBuilder res = new StringBuilder();
int n = 0;
for(String tempStr : s.split("\s+"))
{
StringBuilder tempSB = new StringBuilder(tempStr);
sbArray[n++] = tempSB;
}
for(int m = length-1; m >= 0; m--)
{
res.append(sbArray[m]).append(" ");
}
return res.toString().trim();
}
二刷。
感觉这个题是E难度的。。可能本意是考C,C++这种指针运算,in-place的话还有那么点意思。
对于Java来说比较直接,用split去掉空格顺便变成String[],然后倒着遍历就行了。。
需要注意的就是split()里面的regular expression,我到现在都记不住,每次都上网查。。
网络课和编译器课都学过,学过就忘,忘了就查,羞耻地活在这个世界上……
public class Solution
{
public String reverseWords(String s)
{
if(s.length() == 0) return "";
s = s.trim();
String[] strArray = s.split("\s+");
String res = new String();
for(int i = strArray.length-1;i>=0;i--)
{
res += strArray[i] + " ";
}
return res.trim();
}
}
三刷。
用split来做。。
分完之后倒着添加,注意仔细。。
public class Solution {
public String reverseWords(String s) {
if (s.length() == 0) return s;
s = s.trim();
if (s.length() == 0) return "";
String[] str = s.split("\s+");
StringBuilder sb = new StringBuilder();
for (int i = str.length - 1; i >= 0; i--) {
sb.append(str[i]).append(" ");;
}
return sb.toString().trim();
}
}