剑指offer——翻转单词顺序列

Posted SkyeAngel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer——翻转单词顺序列相关的知识,希望对你有一定的参考价值。

翻转单词顺序列

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

 

解:1、其中有个需要注意的点,就是可能输入的字符串是包含多个空格的"   ",这样的话,不能单纯的依靠str.length==1来解决

现在可以借助String的一个方法trim()可以删除字符串的前面和后面的多余空格。这样就不会有上面的问题了。

2、还有一个问题就是String是一个final类,每次进行赋值的时候,都需要重新开辟空间进行拷贝,所以有个改进方法就是,在进行连接字符串的时候,采用大小可变的StringBuffer来进行,到最后才将StringBuffer字符串改为String类型的

3,在进行字符串反转时,要注意,反转的是以空格为划分的,不是直接将所有的字符反转,此时可以用到String类的一个split()方法,对字符串进行分割

public class Solution {
    public String ReverseSentence(String str) {
        if(str == null || str.trim().equals("")) return str;
        String[] strs = str.split(" ");
        
        for(int start = 0, end = strs.length - 1; start < end; start++, end--){
            swap(strs, start, end);
        }
        str = "";
        for(int i = 0; i < strs.length - 1; i++){
            str = str + strs[i] + " ";
        }
        return str + strs[strs.length - 1];
    }

    public void swap(String[] chars, int i, int j){
        String temp = chars[i];
        chars[i] = chars[j];
        chars[j] = temp;
    }
}

  

另一种方法,不用swap,而是直接在split之后,将数组倒序拼接

public class Solution {
    public String ReverseSentence(String str) {
        if(str == null || str.trim().equals("")) return str;
        String[] strs = str.split(" ");
        str = "";
        for(int i = strs.length - 1; i >= 0; i--){
            str += strs[i];
            if(i != 0) str += " ";
        }
        return str;

    }
}

  

使用StringBuffer来进行反转,此时StringBuffer中有个append来将字符串进行拼接

public class Solution {
    public String ReverseSentence(String str) {
        if(str == null || str.trim().equals("")) return str;
        String[] strs = str.split(" ");
        
        StringBuffer s = new StringBuffer();
        for(int i = strs.length - 1; i >= 0; i--){
            s.append(strs[i]);
            if(i != 0){
                s.append(" ");
            }
        }
        return s.toString();
    }
}

  

以上是关于剑指offer——翻转单词顺序列的主要内容,如果未能解决你的问题,请参考以下文章

剑指OFFER 翻转单词顺序列

剑指offer-翻转单词顺序列

剑指offer——翻转单词顺序列

剑指offer之翻转单词顺序列

[剑指Offer] 44.翻转单词顺序列

剑指offer四十四之翻转单词顺序列