1. 翻转单词顺序
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串”I am a student. “,则输出”student. a am I”。
示例 1:输入: "the sky is blue"输出: "blue is sky the"示例 2:输入: " hello world! "输出: "world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: "a good example"输出: "example good a"解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
思路:
- 从头开始扫描,碰到空格字符跳过
- 然后记录非空格字符串的前后索引位置
- 截取单词存入String[]
- 倒叙遍历String[],使用StringBuilder进行拼接
class Solution { public String reverseWords(String s) { int length = s.length(); if(length==0) return ""; // if(s.equals(" ")) return ""; // 这里必须用equals,不能用"==" , 力扣未重写equals List<String> strList = new ArrayList<>(); int left; int right; for(int i=0;i<length;i++){ if(s.charAt(i)==' ') continue; left = i; while(i+1<length&&s.charAt(i+1)!=' '){ i++; } right = i+1; strList.add(s.substring(left,right)); } String[] strArr = strList.toArray(new String[strList.size()]); StringBuilder sb = new StringBuilder(); int strLength = strArr.length; for(int j=strLength-1;j>=0;j--){ sb.append(strArr[j]).append(" "); } if(strLength==0){ return ""; } return sb.deleteCharAt(sb.length()-1).toString(); } }
