每天一刷,强迫学习
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.
1、word字符顺序不变;
2、输入首尾可以有空格,输出没有;
3、多个空格视为一个空格;
思路:1、很容易想起用trim().split()来分割字符串;
2、将分割后的字符串数组逆序输出到一个字符串中,返回结果;
3、测试,不通过。表现是多个连续空格没有合并为一个空格。捉虫后发现split()分割方法认为两个连续空格之间是一个null的字符串;
4、加入判断字符串是否为空,通过。
总结:1、认真审题;
2、由于实际中写的代码很少碰到分隔符为变长的情况,没有注意到split()分割方法认为两个连续的分隔符之间为null字符串。
public class Solution {
public String reverseWords(String s) {
String s1[] = s.trim().split(" ");
String tempString = "";
int len = s1.length;
for (int i = len - 1; i >= 0; i--) {
if (i > 0 && !s1[i].isEmpty()) {
try {
tempString = tempString + s1[i] + " ";
} catch (Exception e) {
// TODO: handle exception
}
} else {
try {
tempString = tempString + s1[i];
} catch (Exception e) {
// TODO: handle exception
}
}
}
return tempString;
}
}