一 🏠 题目描述
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; //当字符不为空格时, 即处于单词序列 //当字符为空格且上一段序列标记是单词时, 将单词计数加加, 标记当前序列不为单词 elseif (sChar ==' ' && countFlag) ++count, countFlag =false; } if (countFlag) ++count; //处理以单词结尾场景 return count; //返回单词计数 }
3.2 🚀 细节解析
看完 👀👀👀 全注释版的代码实现后,相信看官大大对整体逻辑已经是大写的 OK 了 😃😃😃
那么我们挖掘上述实现的晦涩细节 😖😖😖 进行解析,直接开干,走起来 👇👇👇👇
if (sChar !=' ') countFlag =true;
当字符不为空格时, 即处于单词序列 🐌🐌🐌
elseif (sChar ==' ' && countFlag) ++count, countFlag =false;
当字符为空格且上一段序列标记是单词时, 将单词计数加加, 标记当前序列不为单词 🐳🐳🐳
四 🏠 心路历程
为方便各位看官大大了解博主真实刷题过程,我把当时状态纯纯真实还原,记录在心路历程这一小节,不感兴趣的小伙伴可以直接跳过哈
博主在第一阶段提取 🚀 关键信息没有问题,在第二阶段 🚀 思路整理没有问题,上述实现和题解博主原创