翻转单词顺序列(字符串)

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

思路一:

*先翻转整个句子,再依次翻转每个单词。     

*依据空格来确定单词的起始和终止位置。

*要特别考虑到“   ”等输入中包含多余空格的情形

public class Solution {
    public String ReverseSentence(String str) {
        if (str.length() == 0) return "";
        if (str.trim().equals("")) return str;
        char[] chars = str.toCharArray();
        reverse(chars, 0, chars.length - 1);
        int i = 0;
        int j = 0;
        while (i < chars.length && j < chars.length)
        {
            while (j < chars.length && chars[j] != ' ')
                j++;
            reverse(chars, i, j - 1);
            j++;
            i = j;
        }
        return String.valueOf(chars);
    }
    private void reverse(char[] chars, int start, int end)
    {
        while (start < end)
        {
            char temp = chars[start];
            chars[start] = chars[end];
            chars[end] = temp;
            start++;
            end--;
        }
    }
}



思路二:

利用String对象的split方法。

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

思路三:

public class Solution {
    public String ReverseSentence(String str) {
        if (str.length() == 0) return "";
        if (str.trim().equals("")) return str;
        String res = "";
        String tmp = "";
        for (int i = 0; i < str.length(); i++)
        {
            if (str.charAt(i) == ' ') {
                res = " " + tmp + res;
                tmp = "";
            }
            else
                tmp = tmp + str.charAt(i);
        }
        if (tmp.length() != 0) res = tmp + res;
        return res;
    }
}

思路四:

使用一行递归

public class Solution {
    public String ReverseSentence(String str) {
        if (str.length() == 0) return "";
        if (str.trim().equals("")) return str;
        return (str.lastIndexOf(" ") == -1) ? str : str.substring(str.lastIndexOf(" ") + 1) +" " + ReverseSentence(str.substring(0, str.lastIndexOf(" ")));
    }
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值