题解|HJ1 字符串最后一个单词的长度

字符串最后一个单词的长度

https://www.nowcoder.com/practice/8c949ea5f36f422594b306a2300315da?tpId=37&&tqId=21224&rp=1&ru=/ta/huawei&qru=/ta/huawei/question-ranking

链接字符串最后一个单词的长度

题意:计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。 (注:字符串末尾不以空格为结尾)

方法一:维护当前单词长度

在输入句子时,由于使用scanf("%s",str)会将空格分割的字符串自动划分,变量str会不断更新为最新的一个不包含空格的字符序列。所以可以维护一个变量len,利用EOF判断字符串输入结束,同时不断更新当前单词长度。这样当读到文件末尾,当前的len即为最后一个单词的长度。 时间复杂度:O(n)O(n),空间复杂度:O(1)O(1)

alt


#include <stdio.h>
#include <string.h>
 
int main() {
    char str[5005];
    int len = 0;
    while (scanf("%s", str) != EOF) {
        len = strlen(str);
    }
    printf("%d\n", len);
    return 0;
}

方法二:维护最后一个空格的位置

当使用 getline(cin,str); 输入字符串时,string中可以包含空格。此时可以用str.find()查找每个空格的位置并存放在一个栈里。使用整个字符串的长度减去最后一个空格所在的位置再-1,就是最后一个单词的长度。 时间复杂度:O(n)O(n),空间复杂度:O(n)O(n)

alt

#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
int main() {
   string str;
   getline(cin,str);
   int pos=0;
   stack<int>st;
   while(str.find(' ',pos)!=string::npos){
        pos=str.find(' ',pos);
        st.push(pos);
        pos++;
    }
   if(st.empty()) {
       cout<< str.size() << endl;
   } else {
       cout<< str.size() - st.top() - 1 << endl;
   }
   return 0;
}
全部评论

相关推荐

行云流水1971:这份实习简历的优化建议: 结构清晰化:拆分 “校园经历”“实习经历” 板块(当前内容混杂),按 “实习→校园→技能” 逻辑排版,求职意向明确为具体岗位(如 “市场 / 运营实习生”)。 经历具象化:现有描述偏流程,需补充 “动作 + 数据”,比如校园活动 “负责宣传” 可加 “运营公众号发布 5 篇推文,阅读量超 2000+,带动 300 + 人参与”;实习内容补充 “协助完成 XX 任务,效率提升 X%”。 岗位匹配度:锚定目标岗位能力,比如申请运营岗,突出 “内容编辑、活动执行” 相关动作;申请市场岗,强化 “资源对接、数据统计” 细节。 信息精简:删减冗余表述(如重复的 “负责”),用短句分点,比如 “策划校园招聘会:联系 10 + 企业,组织 200 + 学生参与,到场率达 85%”。 技能落地:将 “Office、PS” 绑定经历,比如 “用 Excel 整理活动数据,输出 3 份分析表;用 PS 设计 2 张活动海报”,避免技能单独罗列。 优化后需强化 “经历 - 能力 - 岗位需求” 的关联,让实习 / 校园经历的价值更直观。 若需要进一步优化服务,私信
实习,投递多份简历没人回...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务