说明
- 单词的构成:无空格字母构成一个单词
- 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括
- 如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个
开始写了一个 没过测试,不过可以翻转,只是空格多了没有处理,代码如下
class Solution {
public:
/**
* @param s : A string
* @return : A string
*/
string reverseWords(string s) {
// write your code here
int len = s.size();
char *str = new char[len];
strcpy(str, s.c_str());
char temp;
int i = 0, j = 0;
for (i = 0, j = len - 1; i < j; i++, j--)
{
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
cout << str << endl;
int k = 0;
while (k < len)
{
i = j = k;
while (str[j] != ' ' && str[j] != '\0')
{
j++;
}
k = j + 1;
j--;
for (; i < j; i++, j--)
{
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
while (str[k] == ' ')
{
k++;
}
}
return str;
}
};
想了很久没想到应对的策略,就从网上找了下 ,找了一个对的,贴出代码来,是转的别人的
class Solution {
public:
/**
* @param s : A string
* @return : A string
*/
string reverseWords(string s) {
// write your code here
string word, line;
int size=s.size();
int i=size-1, j, begin=size-1, end=size-1;
if(s.empty())
return string();
while(i >= 0)
{
while(s[i]==' ' && i>=0) {
begin--;
end--;
i--;
}
while(s[i]!=' ' && i>=0) {
begin--;
i--;
}
word.resize(0);
for(j=begin+1; j<=end; j++){
word.append(1, s[j]);
}
if(begin == 0)
line = line + word;
else
line = line + word + " ";
end = begin;
}
return line;
}
};