1. 题目:
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“He is a good boy.”,则输出“boy. good a is He”。
2. 思路:
先将整个句子翻转,得到”.yob doog a si eH“, 然后将单词反转,得到“boy. good a is He”。
反转的思路:将要反转的字符序列的第0位与length-1位交换,第1位与length-2位交换,以此类推。。。
3. 代码
public class WordReverse {
char[] sentence;
public WordReverse(char[] words){
this.sentence = words;
}
public char[] reverse(int start, int end, char words[]){
int i = start;
int j = end;
if(start<0 || end >= words.length || start > end) return null;
while(i < j){
char tmp = words[i];
words[i] = words[j];
words[j] = tmp;
i++; j--;
}
return words;
}
public char[] senReverse(char sentence[]){
int i =0, j = 0, len = sentence.length;
reverse(0, len-1, sentence);
while(i<len && j<=len){
j++;
if(j == len || ' ' == sentence[j]){
reverse(i, j-1, sentence);
j++;
i = j;
}
}
return sentence;
}
public static void main(String args[]){
Scanner in = new Scanner(System.in);
System.out.println("Please print a sentance:");
char sentence[] = in.nextLine().toCharArray();
WordReverse wrReverse = new WordReverse(sentence);
sentence = wrReverse.senReverse(sentence);
for (char c : sentence) {
System.out.print(c);
}
}
}