题目描述
- 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student.",则输出"student. a am I"。
解题思路
- 先将整个字符串整体翻转。得到".tneduts a ma I"。
- 再将句子中每个单词的字符顺序翻转,得到"student. a am I"。
void reverse(char[] chars, int start ,int end) {
if (chars == null || start >= end || end >= chars.length) {
return;
}
while (start < end) {
char tmp = chars[start];
chars[start] = chars[end];
chars[end] = tmp;
start ++;
end --;
}
}
// 翻转字符串
String revertSentence(String str) {
if (str == null || str.length() <= 0) {
return str;
}
char[] charArray = str.toCharArray();
reverse(charArray, 0, charArray.length - 1);
int start = 0;
int end = 0;
while (start < charArray.length && end < charArray.length) {
while (start < charArray.length && charArray[start] == ' ') {
start ++;
}
end = start + 1;
while (end < charArray.length && charArray[end] != ' ' ) {
end ++;
}
reverse(charArray, start, end - 1);
start = end;
}
return new String(charArray);
}
网友评论