这个题目两种思路,我想到的第一种就是用java的方法split去将字符串的单词一个个分开,然后从后往前加上去,但是这里要注意,如果原本字符串单词之间有多个间隔,那么拆分的字符串数组里面会有空的字符串,要注意区分。而且要注意原始字符串的前后有多余的空格,这里用strim发放来统一处理。
public class t151 {
public String reverseWords(String s) {
s=s.trim();
String[] ss=s.split(" ");
String ret=new String();
for (int i = ss.length-1; i >= 0 ; i--) {
if(ss[i].equals("")) continue;//空字符串跳过
ret+=ss[i]+" ";
}
return ret.trim();
}
}
第二种思路就是双指针来定位单词,从后面开始定位,跳过空格什么的,然后用sustring函数来取出单词,然后加到结果字符串当中,也可以完成,但是算起来复杂一点。
public class t151_2 {
public String reverseWords(String s) {
s=s.trim();//去除首位空格
String ret=new String();
int n=s.length();
int l =n-1,r=n-1;//l表示左边界,r表示右边界
while(l>=0){
while(l>=0&&s.charAt(l)!=' ') l--;//确定左边界
ret+=s.substring(l+1,r+1)+" ";//左包右不包
while(l>=0&&s.charAt(l)==' ') l--;//跳过单词空格没确定右边界
r=l;
}
return ret.trim();
}
}