思路1
递归思想
//解法1:递归
public String reverseSentence1(String str) {
return (str.lastIndexOf(" ")==-1)?str:str.substring(str.lastIndexOf(" ")+1)
+" "+reverseSentence1(str.substring(0,str.lastIndexOf(" ")));
}
思路2
利用栈
//解法2:使用栈
public String reverseSentence2(String str) {
if(str.trim().equals("")&&str.length()>0)
return str;
Stack<String> reverse = new Stack<>();
String string = str.trim();
String[] strings = string.split(" ");
for(int i = 0;i<strings.length;i++) {
reverse.push(strings[i]);
}
string = reverse.pop();
while(!reverse.isEmpty()) {
string = string+" " +reverse.pop();
}
return string;
}
思路3
先根据空格将字符串转成字符串数组,然后倒序拼接。
//解法3:先根据空格将字符串转成字符串数组,然后倒序拼接。
public String reverseSentence3(String str) {
if(str.trim().equals("")&&str.length()>0)
return str;
StringBuilder sb = new StringBuilder();
String string = str;
String[] strings = string.split(" ");
for(int i = strings.length-1;i>=0;i--) {
if(i==0) {
sb.append(strings[i]);
}else {
sb.append(strings[i]);
sb.append(" ");
}
}
return sb.toString();
}
思路4
反转整个句子,然后反转每个单词。
//解法4:反转整个句子,然后反转每个单词。
public String reverseSentence4(String str) {
if(str.trim().equals("")&&str.length()>0)
return str;
char[] ch=str.toCharArray();
reverse(ch, 0, str.length()-1);//翻转整个句子
//翻转句子中的每个单词
int begin=0;
int end=0;
while(begin!=ch.length){//若起始字符为空格,则begin和end都自加
if(ch[begin]==' '){
begin++;
end++;
}
else if(ch[end]==' '){//遍历到终止字符为空格,就进行翻转
reverse(ch, begin, --end);
begin=++end;
}
else if(end==ch.length-1){//若遍历结束,就进行翻转
reverse(ch, begin,end);
begin=++end;
}
else{//没有遍历到空格或者遍历结束,则单独对end自减
end++;
}
}
return String.valueOf(ch);
}
//完成翻转功能
private void reverse(char[] ch,int begin,int end){
while(begin<end){
char temp=ch[begin];
ch[begin]=ch[end];
ch[end]=temp;
begin++;
end--;
}
}
思路5
反转每个单词,然后反转这个句子。
//解法5:先反转每个单词,然后反转整个句子
public String reverseSentence5(String str) {
// trim掉多余空格
if(str==null||str.trim().equals(""))
return str;
// 以空格切分出各个单词
String[] words = str.split(" ");
StringBuffer buffer = new StringBuffer();
for(int i=0;i<words.length;i++){
buffer.append(reverse1(words[i].toCharArray(), 0, words[i].length()-1)).append(" ");
}
if(buffer.length()>0)
// 删除最后一个空格
buffer.deleteCharAt(buffer.length()-1);
return reverse1(buffer.toString().toCharArray(), 0, buffer.length()-1);
}
private String reverse1(char[] str, int l, int r) {
if(l>r)
return "";
char tmp;
while(l<r){
tmp = str[l];
str[l] = str[r];
str[r] = tmp;
l++;
r--;
}
return String.valueOf(str);
}