[中级]单词排序(HJ31)

一:解题思路

这道题目和leetcode 151 有些类似,可以放在一起进行学习。

二:完整代码示例 (C++版和Java版)

C++代码在牛客网上面 AC 90%,有点奇怪。

C++代码:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

void reverse(string& str, int i, int j)
{
    for (; i < j; i++, j--)
    {
        char temp = str[i];
        str[i] = str[j];
        str[j] = temp;
    }
}

bool isAlph(char c)
{
    return (c>='a' && c<='z') || (c>='A' && c<='Z');
}

string reverseWords(string s)
{
    if (s.size() == 0) return "";
    int n = s.size();
    int p = 0;
    int q = 0;
    int end = n - 1;

    while (end >= 0 && (s[end] == ' ' || !isAlph(s[end]))) end--;

    while (q <= end)
    {
        int start = p;
        while (q <= end && (s[q] == ' ' || !isAlph(s[end]))) q++;
        while (q <= end && s[q] != ' ' && isAlph(s[q])) s[p++] = s[q++];
        reverse(s,start,p-1);
        if (q <= end) s[p++] = ' ';
    }

    s = s.substr(0,p);

    reverse(s,0,p-1);

    return s;
}

int main()
{
    string str = "";

    while (getline(cin, str))
    {
        cout << reverseWords(str);
    }

    return 0;
}

 

posted @ 2020-08-06 11:18  repinkply  阅读(233)  评论(0)    收藏  举报