151. 翻转字符串里的单词
给定一个字符串,逐个翻转字符串中的每个单词。
示例 1:
输入: “the sky is blue”
输出: “blue is sky the”
说明:
无空格字符构成一个单词。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-words-in-a-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法一:调用trim()、split()、reverse()
class Solution {
public String reverseWords(String s) {
s=s.trim();
List<String> wordList=Arrays.asList(s.split("\\s+"));
Collections.reverse(wordList);
return String.join(" ",wordList);
}
}
知识点
-
正则表达式中\s匹配任何空白字符,包括空格、制表符、换页符等等, 等价于[ \f\n\r\t\v]
\f -> 匹配一个换页
\n -> 匹配一个换行符
\r -> 匹配一个回车符
\t -> 匹配一个制表符
\v -> 匹配一个垂直制表符
而“\s+”则表示匹配任意多个上面的字符。另因为反斜杠在Java里是转义字符,所以在Java里,我们要这么用“\s+”.
-
public static String join(CharSequence delimiter,
CharSequence… elements)
参数 :
delimiter - 分隔每个元素的分隔符
elements - 要加入的元素。
-
public String[] split(String regex)
参数
regex - 分隔正则表达式
- public String trim()返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。
- public static void reverse(List<?> list)反转指定列表中元素的顺序。
方法二:
class Solution {
public String reverseWords(String s) {
s=s.trim();
if(s.equals(""))
{
return "";
}
String[] str=s.split(" ");
StringBuilder sb=new StringBuilder();
for(int i=str.length-1;i>=0;i--)
{
str[i]=str[i].trim();
if(str[i].equals(""))
{
continue;
}
sb.append(str[i]);
sb.append(" ");
}
return sb.toString().substring(0,sb.length()-1);
}
}