题目来源:77. 翻转单词顺序
代码:
class Solution
{
public:
string reverseWords(string s)
{
stringstream ss(s);
string word;
vector<string> words;
while (ss >> word)
{
words.push_back(word);
}
reverse(words.begin(), words.end());
string ans;
for (int i = 0; i < words.size(); i++)
{
ans += words[i];
if (i != words.size() - 1)
ans.push_back(' ');
}
return ans;
}
};
复杂度分析:
时间复杂度:O(n),其中 n 是字符串 s 的长度。
空间复杂度:O(n),其中 n 是字符串 s 的长度。
代码:
class Solution
{
public:
string reverseWords(string s)
{
if (s.empty())
return s;
reverse(s.begin(), s.end());
int n = s.size();
int begin = 0, end = 0;
while (begin < n)
{
if (s[begin] == ' ')
{
begin++;
end++;
}
else if (s[end] == ' ' || end == n)
{
reverse(s.begin() + begin, s.begin() + end);
begin = end;
}
else
end++;
}
return s;
}
};
复杂度分析:
时间复杂度:O(n),其中 n 是字符串 s 的长度。
空间复杂度:O(n),其中 n 是字符串 s 的长度。
题目链接:78. 左旋转字符串
代码:
class Solution
{
public:
string leftRotateString(string str, int n)
{
if (n == 0)
return str;
int len = str.size();
n %= len;
return str.substr(n) + str.substr(0, n);
}
};
复杂度分析:
时间复杂度:O(len),其中 len 是字符串 str 的长度,
空间复杂度:O(1)。
代码:
class Solution
{
public:
string leftRotateString(string str, int n)
{
if (n == 0)
return str;
int len = str.size();
n %= len;
reverse(str.begin(), str.begin() + n);
reverse(str.begin() + n, str.end());
reverse(str.begin(), str.end());
return str;
}
};
复杂度分析:
时间复杂度:O(len),其中 len 是字符串 str 的长度,
空间复杂度:O(1)。