您的位置:首页 > 其它

微软算法100题10 翻转句子中单词的顺序

2015-10-23 10:48 369 查看
第10 题
翻转句子中单词的顺序。
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student. a am I”

思路:可以先翻转整个字符串,然后依次截取各个单词,在对单词进行翻转,目前的解决方案默认每个单词之间只有一个空格,可以考虑如果有多个空格的情况

package com.rui.microsoft;
/**
* 翻转句子中单词的顺序。
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student. a am I”
*/
public class Test10_ReverseStringInSentence {

public static void main(String[] args) {
String s = "I AM A STUDENT";
char[] ss = s.toCharArray();
reverse(ss, 0, ss.length - 1);
reverseAll(ss);
System.out.println(String.copyValueOf(ss));
}

public static void reverse(char[] s, int start, int end){
while(start < end){
char temp = s[start];
s[start] = s[end];
s[end] = temp;
start++;
end--;
}
}

public static void reverseAll(char[] sentence){
int i = 0, start = 0;
while(i < sentence.length){
if(sentence[i] != ' '){
i++;
}else{
reverse(sentence, start, i-1);
//move pointer 'start' to the character after pointer i
start = i+1;
//move pointer 'i' to the next character
i++;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: