单词顺序反转,翻转单词顺序列的代码实现和思路

KLQ 2020-04-15 14:09:43 java常见问答 4175

下面给大家分享的是翻转单词顺序列的代码实现和思路相关内容,那么具体的代码应该如何实现呢?实现思路又是怎样的?一起来看一下实例吧。

题目:

身边来了一个新员工,每天早晨总是拿一本英文杂志写一些句子在本子上面,我对于新同事写的内容非常的好奇,所以,有一天就向新同事借过来看,但是我发现,我很难读懂它的意思,例如student. a am I,一直到后面,我才清楚的意识到,我的新同事把句子单词的顺序进行了翻转,正确的句子应该是I am a student,我对于--的翻转这些单词顺序不拿手,你可以帮助一下吗?

思路1:

翻转str从s到e的部分

代码实现:

void ReverseWord(string & str, int s, int e)
{
    while (s < e)
        swap(str[s++], str[e--]);
}
string ReverseSentence(string str)
{
    ReverseWord(str, 0, str.size() - 1); //先整体翻转
    int s = 0, e = 0;
    int i = 0;
    while (i < str.size())
    {
        while (i < str.size() && str[i] == ' ') //空格跳过
            i++;
        e = s = i; //记录单词的第一个字符的位置
        while (i < str.size() && str[i] != ' ') //不是空格 找单词最后一个字符的位置
        {
            i++;
            e++;
        }
        ReverseWord(str, s, e - 1); //局部翻转
    }
    return str;
}

思路2:

先将整个句子进行翻转,之后,一一翻转每一个单词,根据空格来确定单词的起始和终止位置

代码实现:

public class Solution
{
    public String ReverseSentence(String str)
    {
        char[] chars = str.toCharArray();
        reverse(chars, 0, chars.length - 1);
        int blank = -1;
        for (int i = 0; i < chars.length; i++)
        {
            if (chars[i] == ' ')
            {
                int nextBlank = i;
                reverse(chars, blank + 1, nextBlank - 1);
                blank = nextBlank;
            }
        }
        reverse(chars, blank + 1, chars.length - 1); //最后一个单词单独进行反转
        return new String(chars);
    }
    public void reverse(char[] chars, int low, int high)
    {
        while (low < high)
        {
            char temp = chars[low];
            chars[low] = chars[high];
            chars[high] = temp;
            low++;
            high--;
        }
    }
}

思路3:

使用栈操作

例:“world! hello”:

首先每个字符串一次进栈:

单词顺序反转

之后再依次出栈:hello world!

代码实现:

public String ReverseSentence(String str)
{
    if (str.trim()
        .equals("") && str.length() > 0)
    {
        return str;
    }
    Stack reverse = new Stack();
    String string = str.trim();
    String[] strings = string.split(" ");
    for (int i = 0; i length; i++)
    {
        reverse.push(strings[i]);
    }
    string = reverse.pop();
    while (!reverse.isEmpty())
    {
        string = string + " " + reverse.pop();
    }
    return string;
}

以上的3种思路大家都可以参考一下,更多Java实例,可以继续来本站了解。