1、题目描述:
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
2、思路:
先将整个单词进行翻转,然后在利用空格切分单词,分别将单个单词旋转回来。这里面通过定义 start 、end 两个指针来标识需要旋转的起始位置,只需要在实现一个旋转字符数组的某一个部分的方法。对字符串进行操作,都要转换成对字符数组进行操作。
3、代码:
public class Solution { public static void main(String[] args) { String s = "I am a student."; String s1 = ReverseSentence(s); System.out.println(s1); } public static String ReverseSentence(String str) { //先整体翻转单词 //再将每个单词翻转回来,因此需要一个翻转部分字符的方法 char[] c = str.toCharArray(); //翻转整个字符串 reverse(c, 0, c.length - 1); int start = 0; int end; //拆分单词 for (int i = 0; i < c.length; i++) { if (c[i] == ' ' || i == c.length - 1) { //单词末尾end指针不需要向前移动 if (c[i] == ' ') { end = i - 1; } else { end = i; } reverse(c, start, end); start = i + 1; } } String s = String.valueOf(c); return s; } public static void reverse(char[] c, int start, int end) { while (start < end) { char temp = c[start]; c[start] = c[end]; c[end] = temp; start++; end--; } } }