思路:注意此题目没有 " A " 这种后台样例,所有可以使用 split 来解决这个问题,这个在下面的思路中说到,使用 StringBuilder 来记录答案,首先我们可以遍历字符串,当遇到 ' ' 的时候,如果是第一个 ' ', 此时我们需要翻转前面的字符串,然后拼接到答案中,如果不是则只用拼接 ' ' 即可。这样遍历的时候,最后一个字符串可能无法被我们保存下来,所以在最后如果最后一个字符串还没有被拼接我们就拼接。最后在翻转答案转为字符串返回即可。
public class Solution { public String ReverseSentence(String str) { if(str == null || str.equals("")) return ""; int n = str.length(); int pos = 0; StringBuilder ans = new StringBuilder(); for(int i = 0; i < n; ++ i) { if(str.charAt(i) == ' ') { if(i != 0 && str.charAt(i - 1) != ' ') { ans.append(new StringBuilder(str.substring(pos, i)).reverse()); } ans.append(" "); pos = i + 1; } } if(pos < n) ans.append(new StringBuilder(str.substring(pos, n)).reverse()); return ans.reverse().toString(); } }
这种情况下是可以把末尾空格也进行翻转的。
下面是使用 split 函数分解之后在进行翻转,然后拼接,最后在翻转的结果,特判全都是空格的串可以顺利 AC,但是末尾空格不会进行翻转。
public class Solution { public String ReverseSentence(String str) { if(str == null || str.equals("")) return ""; String[] strs = str.split(" "); if(strs.length <= 0) return str; StringBuilder[] strs1 = new StringBuilder[strs.length]; for(int i = 0; i < strs.length; ++ i) { strs1[i] = new StringBuilder(strs[i]); } StringBuilder ans = new StringBuilder(); for(int i = 0; i < strs1.length; ++ i) { strs1[i].reverse(); if(i != 0) ans.append(" "); ans.append(strs1[i]); } return ans.reverse().toString(); } }
很显然,这种方法没有将末尾的空格进行翻转,但是在这道题目中也顺利 AC 了。