翻转单词顺序
约 313 字大约 1 分钟
题目:
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student.",则输出"student. a am I"。
分析:
- 第一步翻转句子中所有的字符。比如翻转"I am a student."中所有的字符得到".tneduts a ma I",此时不但翻转了句子中单词的顺序,连单词内的字符顺序也被翻转了。
- 第二步再翻转每个单词中字符的顺序,就得到了"student.a am I"。这正是符合题目要求的输出。
代码:
public class ReverseSolution {
public static void reverse(char[] arr, int start, int end) {
if (null == arr || start < 0 || end > arr.length - 1) {
return;
}
while (start < end) {
char temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
public static String reverseStr(String str) {
if (null == str || "".equals(str)) {
return null;
}
char[] chs = str.toCharArray();
int start = 0;
int end = chs.length - 1;
reverse(chs, start, end);
start = end = 0;
while (start < chs.length) {
if (chs[start] == ' ') {
start++;
end++;
} else if (end == chs.length || chs[end] == ' ') {
reverse(chs, start, --end);
start = end + 1;
end++;
} else {
end++;
}
}
return String.valueOf(chs);
}
public static void main(String[] args) {
String str = "I am a student.";
System.out.println(reverseStr(str));
}
}