题目如下
题目要求:
1.字母之间要有空格
2.单词倒序
3.反转后两端不能有空格
4.反转后内部不能有多余空格
参考力扣官方解析:
1.使用内部函数实现
使用 split 将字符串按空格分割成字符串数组;
使用 reverse 将字符串数组进行反转;
使用 join 方法将字符串数组拼成一个字符串。
代码如下:
List <String> 是非定长的字符串。
static public String huiwen2(String a){
a = a.trim();
// 正则匹配连续的空白字符作为分隔符分割
List<String> wordList = Arrays.asList(a.split("\\s+"));
Collections.reverse(wordList);
return String.join(" ", wordList);
}
2.自己的想法
1.首先先去掉两边空格(用trim()方法)
2.转为数组,如何发现空格 把空格前的归为一个单词(stringBuffer 类)
3.倒置(参考官方解释,用的双端队列)
static public String fanzhuan(String a) {
Deque<String> d = new ArrayDeque();
a = a.trim();//去掉两边空格
StringBuffer c = new StringBuffer();
char[] b = a.toCharArray(); //转为字符数组
for (int i=0;i<a.length();i++){
if (b[i]!=' ')
{
c.append(b[i]) ;
}
else if ((c.length() != 0) && (b[i] == ' ')){
d.offerFirst(c.toString()); //将第一个单词放入双端队列
c.setLength(0);//将c置为 什么都没有,准备存下一个单词
}
}
d.offerFirst(c.toString());//将指定元素插入此双端队列的开头。(最后一个单词的插入)
return String.join(" ", d);
}