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

250 阅读1分钟

算法训练打卡day1 2023.1.8

题目描述

计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。

输入描述:

输入一行,代表要计算的字符串,非空,长度小于5000。

输出描述:

输出一个整数,表示输入字符串最后一个单词的长度。

示例1

 

输入:

i love you

输出:

3

说明:

最后一个单词为you,长度为3  

 

思路1

从字符串末尾向前遍历,遇到空格停止遍历,返回长度

具体实现

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str;
    getline(cin,str); //输入字符串,并存入str
    int n=0,flag=1;   //n用来保存最后一个单词长度,flag作为非空标志,flag=0表示非空
    for(int i=str.length()-1;i>=0;i--)
    {
        if(flag&&str[i]==' '){  //最后一个字符为空格,跳出当前循环,强迫开始下一个循环
            continue;
        }
        else if (str[i]!=' '){  //第i+1个字符(str[i])非空格时,长度n加一,flag置0
            flag=0;
            n++;
        }
        else
        {
            break;
        }
        
    }
    cout<<n<<endl;
    return 0;
}



 

时间复杂度

O(n)  

思路2

利用cin库函数,cin只能读取空格前面的字符串,遇到字符串会停止,而cin.getline()函数和cin.get()函数这两个函数都读取一行输入,直到达到换行符。但是,随后getline将丢弃换行符(用空字符代替),而get会保留换行符在输入序列,我们这里利用cin.get和cin的特点,cin可以使str中始终保存的是最后一个空格之后的单词,而cin.get()用来检测回车(即整个字符串的输入结束),此时str中保存的即为最后一个单词。最后输出str的长度即可

具体实现

#include<iostream>
#include<string>
using namespace std;

int main()
{
   string str; 
   while(cin >> str) {
   if(cin.get() == '\n') break; 
   }; 
   cout << str.size();
   return 0;

}

 

时间复杂度

O(1)  

小结

算法二更为简介,时间复杂度更低,但算法一更易想到。