c_cpp 151.字符串中的反向词 - DifficultyMedium - 2018.9.5
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 151.字符串中的反向词 - DifficultyMedium - 2018.9.5相关的知识,希望对你有一定的参考价值。
/*
1:先移除多余的空格
2:逐个单词进行一次旋转
3:全部旋转
*/
class Solution {
public:
void removeLeftSideSpace(string &s) {
int left = 0;
for (int i = 0; i < s.length(); i++) {
if (s[i] == ' ') left++;
else break;
}
s.erase(0, left);
}
void removeRightSideSpace(string &s) {
int right = s.length();
for (int j = s.length()-1; j >= 0; j--) {
if (s[j] == ' ') right--;
else break;
}
s.erase(right, s.length()-right);
}
void removeInSideSpace(string &s) {
char preChar;
int index = 0;
while(index < s.length()) {
if (s[index] == ' '
&& preChar == ' ') {
s.erase(index, 1);
continue;
}
preChar = s[index];
index++;
}
}
void reverseWord(string &s, int l, int r) {
if (l >= r
|| l < 0
|| r >= s.length()) {
return;
}
char tmp;
while(l < r) {
tmp = s[l];
s[l] = s[r];
s[r] = tmp;
l++;
r--;
}
}
void reverseWords(string &s) {
// 先清理左边的空格
removeLeftSideSpace(s);
// 清理右边的空格
removeRightSideSpace(s);
// 清理中间的空格
removeInSideSpace(s);
// 逐个单词进行旋转
s += ' ';
int left = 0;
int right = 0;
while (right < s.length()) {
if (s[right] == ' ') {
reverseWord(s, left, right-1);
left = right+1;
}
right++;
}
// 移除右边的空格
removeRightSideSpace(s);
// 进行一次全部旋转
reverseWord(s, 0, s.length()-1);
}
};
以上是关于c_cpp 151.字符串中的反向词 - DifficultyMedium - 2018.9.5的主要内容,如果未能解决你的问题,请参考以下文章
java 151.字符串中的反向字(就地).java
java 151.字符串中的反向字(就地).java
java 151.字符串中的反向字(就地).java
java 151.字符串中的反向字(就地).java
java 151.字符串中的反向字(就地).java
151 Reverse Words in a String 翻转字符串里的单词