刷爆力扣之字符串中的单词数
HELLO,各位看官大大好,我是阿呆 🙈🙈🙈
今天阿呆继续记录下力扣刷题过程,收录在专栏算法中 😜😜😜
该专栏按照不同类别标签进行刷题,每个标签又分为 Easy、Medium、Hard 三个等级 👊👊👊
本部分所有题目均来自于LeetCode 网,并于每道题目下标明具体力扣网原题链接 🏃🏃🏃
OK,兄弟们,废话不多直接上题,冲冲冲 🌞🌞🌞
一 🏠 题目描述
434. 字符串中的单词数
统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。
请注意,你可以假定字符串里不包括任何不可打印的字符。
示例:
输入: "Hello, my name is John"
输出: 5
解释: 这里的单词是指连续的不是空格的字符,所以 "Hello," 算作 1 个单词。
二 🏠破题思路
2.1 🚀 关键信息
解决问题第一步,当然先提取题目字面上的关键信息 😎😎😎
题干相当直白,注意一下 此处单词定义为指连续不是空格的字符
提取完题目中的关键信息后,直接进入第二阶段,思路整理 😃😃😃
2.2 🚀 思路整理
正向遍历法
相当直白的送分题,代码实现有详细注释,不多赘述
整理完解题思路后,直接进入第三阶段,代码实现 😃😃😃
三 🏠 代码详解
3.1 🚀 代码实现
按照我们刚才的破题思路,直接代码走起来 👇👇👇👇
int countSegments(std::string s) {
int count = 0; //单词计数
bool countFlag = false; //标记是否为单词
for (auto& sChar : s) { //遍历字符串
if (sChar != ' ') countFlag = true; //当字符不为空格时, 即处于单词序列
//当字符为空格且上一段序列标记是单词时, 将单词计数加加, 标记当前序列不为单词
else if (sChar == ' ' && countFlag) ++count, countFlag = false;
}
if (countFlag) ++count; //处理以单词结尾场景
return count; //返回单词计数
}
3.2 🚀 细节解析
看完 👀👀👀 全注释版的代码实现后,相信看官大大对整体逻辑已经是大写的 OK 了 😃😃😃
那么我们挖掘上述实现的晦涩细节 😖😖😖 进行解析,直接开干,走起来 👇👇👇👇
if (sChar != ' ') countFlag = true;
当字符不为空格时, 即处于单词序列 🐌🐌🐌
else if (sChar == ' ' && countFlag) ++count, countFlag = false;
当字符为空格且上一段序列标记是单词时, 将单词计数加加, 标记当前序列不为单词 🐳🐳🐳
四 🏠 心路历程
为方便各位看官大大了解博主真实刷题过程,我把当时状态纯纯真实还原,记录在心路历程这一小节,不感兴趣的小伙伴可以直接跳过哈
博主在第一阶段提取 🚀 关键信息没有问题,在第二阶段 🚀 思路整理没有问题,上述实现和题解博主原创
五 🏠 结语
身处于这个浮躁的社会,却有耐心看到这里,你一定是个很厉害的人吧 👍👍👍
如果各位看官大大觉得文章有帮助的话,别忘了点赞 + 关注哦,你们的鼓励就是我最大的动力
博主还会不断更新更优质的内容,加油吧!技术人! 💪💪💪