力扣,
Python
class Solution:
def reverseMessage(self, message: str) -> str:
origin_arr = message.split(' ')
valid_arr = []
for item in origin_arr:
if len(item) > 0:
valid_arr.append(item)
valid_arr.reverse()
return ' '.join(valid_arr)
Java
class Solution {
public String reverseMessage(String message) {
String newStr = message.trim();
List<String> strArray = new ArrayList<>();
int i = 0;
while (i < newStr.length()) {
if (newStr.charAt(i) == ' ') {
++i;
} else {
int j = i + 1;
while (j < newStr.length() && newStr.charAt(j) != ' ') {
++j;
}
strArray.add(newStr.substring(i, j));
i = j;
}
}
StringBuilder s = new StringBuilder();
for (i = strArray.size() - 1; i > 0; --i) {
s.append(strArray.get(i));
s.append(" ");
}
if (strArray.size() > 0) {
s.append(strArray.get(0));
}
return s.toString();
}
}
20180906整理
##Solution1:
自己想的垃圾算法
对于c++中的string对象,substr()和erase()函数都是很常用的,常见用法必须熟练掌握!
class Solution {
public:
string ReverseSentence(string str) {
string str_copy = str, temp, result;
stack<string> res; //对字符串从前向后进行切割,用栈存储,实现逆序输出
while(str_copy.find(' ') != string::npos){
temp = str_copy.substr(0,str_copy.find_first_of(' '));
res.push(temp);
str_copy.erase(0, str_copy.find_first_of(' ') + 1);
}
res.push(str_copy);
while(res.size() > 1) {
result += res.top();
result += ' ';
res.pop();
}
result += res.top();
return result;
}
};
##Solution2:
这应该是书上的思路了。。
class Solution {
public:
string ReverseSentence(string str) {
if (str.size() <= 1) return str;
if (str.find_first_of(' ') == string::npos)
return str;
reverse(str.begin(), str.end());
int slow = 0, fast = 0;
for (int i = 0; i < str.size(); ) {
int j = i;
while (j + 1 < str.size() && str[j + 1] != ' ')
j++;
my_swap(str, i, j);
if (j + 2 < str.size())
i = j + 2;
else break;
}
return str;
}
private:
void my_swap(string &str, int start, int end) {
int left = start, right = end;
while (left < right) {
char tmp = str[left];
str[left] = str[right];
str[right] = tmp;
left++; right--;
}
return;
}
};