整体思想:1.先翻转整个英文句子;2.逐个翻转句子中的每个单词
package com.example.interview42_1;
public class Solution {
public String ReverseSentence(String str) {
//整体思路:1.翻转整个英文句子;2.逐个翻转句子中的每个单词
if (str == null || str.length() <= 0) {
return "";
}
char[] charArray = str.toCharArray();
//1.翻转整个英文句子
int begin = 0;
int end = charArray.length - 1;
//翻转后得到的英文句子
char[] reverseCharArray = Reverse(charArray, begin, end);
//2.逐个翻转 翻转后的英文句子中的每个单词
//需要确定begin和end
begin = end = 0;
while (begin < reverseCharArray.length && end < reverseCharArray.length ) {
if (reverseCharArray[begin] ==' ') {
begin++;
end++;
} else if (reverseCharArray[end] == ' ') {
//如果begin指向字符不为空格,而end指向为空格,此时可以确定一个单词的起始位置
end--;
Reverse(reverseCharArray, begin, end);
//调整begin的位置,end的位置,end需要+1,begin和end位于同样的位置
begin = ++end;
} else {
//如果begin指向字符不为空格,而end指向字符不为空格
end++;
}
}
if (end == reverseCharArray.length) {
end--;
Reverse(reverseCharArray, begin, end);
}
//将reverseCharArray转换为字符串
String string = String.valueOf(reverseCharArray);
return string;
}
public char[] Reverse(char[] charArray, int begin, int end) {
if (charArray == null) {
return null;
}
while (begin < end) {
char temp = charArray[begin];
charArray[begin] = charArray[end];
charArray[end] = temp;
begin++;
end--;
}
return charArray;
}
}