算法每日一题 - 句子逆序
2018-02-02 本文已影响37人
野狗子嗷嗷嗷
题目描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符。
解题思路
- 从后往前依次遍历字符,通过判断字符是否为空来切分每个单词
- 两次翻转:先整体翻转,然后再每个单词翻转
- API法:用split分割字符串后逆序输出
代码实现
public class ReverseSentence {
public String reverse(String sentence) {
String str = "";
StringBuilder result = new StringBuilder();
// 从后往前扫描,遇到空格就处理一个单词
for (int i = sentence.length() - 1; i >= 0; i--) {
if (sentence.charAt(i) != ' ')
str += sentence.charAt(i);
else {
for (int j = str.length() - 1; j >= 0; j--)
result.append(str.charAt(j));
result.append(" ");
str = "";
}
}
// 再把最后一个单词追加到结果串上
for (int j = str.length() - 1; j >= 0; j--)
result.append(str.charAt(j));
return result.toString();
}
/**
* 用split分割字符串后逆序输出
*/
public String reverseAPI(String sentence) {
StringBuilder sb = new StringBuilder();
String[] words = sentence.split("\\s+");
for (int i = words.length - 1; i > 0; i--) {
sb.append(words[i]).append(" ");
}
sb.append(words[0]);
return sb.toString();
}
public static void main(String[] args) {
ReverseSentence obj = new ReverseSentence();
System.out.println(obj.reverse("I am a boy"));
}
}