[中级]单词排序(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; }