Every day a leetcode
题目来源:434. 字符串中的单词数
解法1:istringstream
我们知道,C++默认通过空格(或回车)来分割字符串输入,即区分不同的字符串输入。
istringstream类用于执行C++风格的串流的输入操作。它的作用是从string对象str中读取字符,用空格作为字符串分隔符。
代码:
/*
* @lc app=leetcode.cn id=434 lang=cpp
*
* [434] 字符串中的单词数
*/
// @lc code=start
class Solution
{
public:
int countSegments(string s)
{
istringstream iss(s);
vector<string> words;
string word;
while (iss >> word)
words.push_back(word);
return words.size();
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(n),其中n是字符串s的长度。
空间复杂度:O(n/2),其中n是字符串s的长度。
解法2:遍历
计算字符串中单词的数量,就等同于计数单词的第一个下标的个数。因此,我们只需要遍历整个字符串,统计每个单词的第一个下标的数目即可。
满足单词的第一个下标有以下两个条件:
- 该下标对应的字符不为空格;
- 该下标为初始下标或者该下标的前下标对应的字符为空格;
代码:
/*
* @lc app=leetcode.cn id=434 lang=cpp
*
* [434] 字符串中的单词数
*/
// @lc code=start
// class Solution
// {
// public:
// int countSegments(string s)
// {
// istringstream iss(s);
// vector<string> words;
// string word;
// while (iss >> word)
// words.push_back(word);
// return words.size();
// }
// };
class Solution
{
public:
int countSegments(string s)
{
int count = 0;
for (int i = 0; i < s.size(); i++)
if ((i == 0 || s[i - 1] == ' ') && s[i] != ' ')
count++;
return count;
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(n)
空间复杂度:O(1)