《剑指offer》JZ44翻转单词顺序列

    技术2022-07-11  83

    牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

    解析:两种方法:

    ①由后向前加String

    ②滑动窗口,依次翻转

     

    代码:

    public class Solution {     public String ReverseSentence(String str) {         if(str.trim().length() <= 0)             return str;         String[] strArr = str.split(" ");         String res = "";         for(int i = strArr.length - 1; i >= 0; i--){                          if(i != 0){                 res += strArr[i] + " ";             }else{                 res += strArr[i];             }                      }         return res;     } }

    student. a am I   -----> 第一次翻转: I ma a .stneduts  --------->接下来的翻转(每次翻转一个单词):I  am  a  students.

    public class Solution {     public String ReverseSentence(String str) {         if(str.trim().length() <= 0)             return str;         char[] chars = str.toCharArray();         reverseChars(chars, 0, str.length()-1);         int l = 0;         int r = 0;         while(l < str.length()){             if(chars[r] == ' '){                 reverseChars(chars, l, r-1);                 r++;                 l = r;             }             if(r == str.length() - 1){                 reverseChars(chars, l, r);                 break;             }             r++;         }         return String.valueOf(chars);     }     public void reverseChars(char[] chars, int l, int r){         while(l < r){             char temp = chars[l];             chars[l] = chars[r];             chars[r] = temp;             l++;             r--;         }     } }

     

    Processed: 0.018, SQL: 9