题解|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;
}
全部评论

相关推荐

06-02 15:17
门头沟学院 Java
心爱的idea:怎么会呢 应该是打招呼有问题 问就说实习6个月全国可飞随时到岗
点赞 评论 收藏
分享
05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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