给定一个字符串,逐个翻转字符串中的每个单词。
示例 1:
输入: “the sky is blue”
输出: “blue is sky the”
示例 2:
输入: " hello world! "
输出: “world! hello”
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: “a good example”
输出: “example good a”
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
说明:
无空格字符构成一个单词。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
方法一:像这种如果不用StringBulider,采用字符串相加的方法,速度会很慢,不建议采用。17ms
class Solution {
public String reverseWords(String s) {
s=s.trim();
String[] str=s.split("[\\s]+");
String res="";
for(int i=str.length-1;i>0;i--){
res+=str[i]+" ";
}
res+=str[0];
return res;
}
}
方法二:像这种用了StringBuilder但是split里面用了“ ”+ 即加号,效率也会很低。这种情况和split[\\s]+差不多,效率也会很低6ms
class Solution {
public String reverseWords(String s) {
s=s.trim();
String[] str=s.split(" +");
StringBuilder res=new StringBuilder();
for(int i=str.length-1;i>0;i--){
res.append(str[i]).append(" ");
}
res.append(str[0]);
return res.toString();
}
}
方法三:这里只用了split(" "),在for循环里面判断是否有“”,如果不是“”,才进行append操作。2ms
class Solution {
public String reverseWords(String s) {
//这里面如果用split(" "+)会慢一些
String[] str=s.trim().split(" ");
StringBuilder res=new StringBuilder();
for(int i=str.length-1;i>0;i--){
if(!str[i].equals(""))
res.append(str[i]).append(" ");
}
res.append(str[0]);
return res.toString();
}
}