题目描述
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
为简单起见,标点符号和普通字母一样处理。
例如输入字符串”I am a student.”,则输出”student. a am I”。
样例
输入:"I am a student."
输出:"student. a am I"
算法1
除开先翻转整个句子 再反转单词的做法 我的比较硬核 直接逐个双指针的翻转整个单词
C++ 代码
class Solution {
public:
int findsubString(const string& s, string& revertStr ,size_t& findPos) {
size_t start = s.find_last_not_of(' ', findPos);
if (start == string::npos) {
return -1;
}
findPos = start ;
size_t end = s.find_last_of(' ', findPos);
findPos = end; int len = 0;
if (end == string::npos){
end = 0;
len = start - end + 1;
}
else{
end++;
len = start - end+1;
}
revertStr += s.substr(end, len);
if (findPos == string::npos)
return -1;
revertStr += " ";
return 1;
}
string reverseWords(string s) {
if (s.empty()) return s;
string res;
size_t findPos = s.size()-1;
int ret = findsubString(s, res, findPos);
while (ret == 1) {
ret = findsubString(s, res, findPos);
}
return res;
}
};