给定一个字符串,逐个翻转字符串中的每个单词。
样例
样例 1:
输入: "the sky is blue"
输出: "blue is sky the"
样例解释:
返回逐字反转的字符串.
样例 2:
输入: "hello world"
输出: "world hello"
样例解释:
返回逐字反转的字符串.
说明
-
单词的构成:无空格字母构成一个单词,有些单词末尾会带有标点符号
-
输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括
-
如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个
public class Solution {
/*
* @param s: A string
* @return: A string
*/
public String reverseWords(String str) {
// write your code here
int temp=str.indexOf(" ");
if(temp < 0){
return str;
}else if(temp == 0){
return reverseWords(str.substring(1));
}
String ret=reverseWords(str.substring(temp+1));
if(ret.length()>0){
ret=ret+" ";
}
return ret+str.substring(0,temp);
}
}
/*
* @param s: A string
* @return: A string
*/
public String reverseWords(String s) {
// write your code here
if (s.length() == 0 || s == null || s.equals(" ")) {
return " ";
}
StringBuilder sb = new StringBuilder();
boolean flag=false;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != ' ') {
sb.append(s.charAt(i));
flag=true;
}
try {
if (s.charAt(i) == ' ' && s.charAt(i + 1) != ' ') {
sb.append(' ');
}
} catch (Exception e) {
continue;
}
}
// 以字符串中原本就有的空格来分割,并不是加入新的空格来分割一串字母
String[] array = sb.toString().split(" ");
sb = new StringBuilder();
// 从字符串尾部开始遍历
for (int i = array.length - 1; i >= 0; i--) {
// array[i] 是单词
if (!array[i].equals(" ")) {
// 反转字符串首尾不能包含空格,
// 当 sb 长度大于 0 时,给每个单词之间添加空格
if (sb.length() > 0) {
sb.append(" ");
}
sb.append(array[i].replace("\\s*", ""));
}
}
return sb.toString();
}