剑指offer:翻转单词顺序列
题意描述
将字符串中的单词进行反转。例如,“student. a am I” ——》“I am a student.”
解题思路
一、思路一
使用split分割字符串,添加入String数组,并倒序遍历,利用StringBuilder拼接每个字符串,最后返回。注意,当遍历到第一个元素之前,都要添加一个空格。
public String ReverseSentence(String str) {
if(str.trim().equals("")) return str; //“ ” 与 “” 的情况
StringBuilder sb = new StringBuilder();
String[] string = str.split(" ");
for(int i=string.length-1;i>=0;i--){ //倒序遍历
sb.append(string[i]);
if(i > 0){
sb.append(" "); //遍历到第一个单词之前都要添加空格
}
}
return sb.toString();
}
二、思路二
先将字符串整体反转,再根据空格符号,依次反转部分字符串。
public String ReverseSentence(String str) {
if(str == null || str.trim().equals("")) return str;
char[] chars = str.toCharArray();
int len = str.length();
swap(chars,0,len-1); //反转整个字符串
int start = 0,end = 0;
while(start < len){
if(chars[start] == ' '){ //start为空格,跳过
start++;
end++;
} //end移动到数组尾部 或 当前为空格,说明start与end之间已经构成一个单词
else if(end == len || chars[end] == ' '){
swap(chars,start,--end); //当前end指向空格,需要向前回退一位
start = ++end; //end当前为空格,下一位才是单词起始字符
}else{
end ++;
}
}
return new String(chars); //转换成String再返回
}
public void swap(char[] chars,int start,int end){
while(start < end){
char temp = chars[start];
chars[start++] = chars[end];
chars[end--] = temp;
}
}

浙公网安备 33010602011771号