C++实现LeetCode(58.求末尾单词的长度)

 更新时间:2021年07月16日 09:21:07   作者:Grandyang  
这篇文章主要介绍了C++实现LeetCode(58.求末尾单词的长度),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

[LeetCode] 58. Length of Last Word 求末尾单词的长度

Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the length of last word in the string.

If the last word does not exist, return 0.

Note: A word is defined as a character sequence consists of non-space characters only.

Example:

Input: "Hello World"
Output: 5

这道题难度不是很大。先对输入字符串做预处理,去掉开头和结尾的空格,然后用一个计数器来累计非空格的字符串的长度,遇到空格则将计数器清零,参见代码如下:

解法一:

class Solution {
public:
    int lengthOfLastWord(string s) {
        int left = 0, right = (int)s.size() - 1, res = 0;
        while (s[left] == ' ') ++left;
        while (s[right] == ' ') --right;
        for (int i = left; i <= right; ++i) {
            if (s[i] == ' ') res = 0;
            else ++res;
        }
        return res;
    }
};

昨晚睡觉前又想到了一种解法,其实不用上面那么复杂的,这里关心的主要是非空格的字符,那么实际上在遍历字符串的时候,如果遇到非空格的字符,只需要判断其前面一个位置的字符是否为空格,如果是的话,那么当前肯定是一个新词的开始,将计数器重置为1,如果不是的话,说明正在统计一个词的长度,计数器自增1即可。但是需要注意的是,当 i=0 的时候,无法访问前一个字符,所以这种情况要特别判断一下,归为计数器自增1那类,参见代码如下:

解法二:

class Solution {
public:
    int lengthOfLastWord(string s) {
        int res = 0;
        for (int i = 0; i < s.size(); ++i) {
            if (s[i] != ' ') {
                if (i != 0 && s[i - 1] == ' ') res = 1;
                else ++res;
            }
        }
        return res;
    }
};

下面这种方法是第一种解法的优化版本,由于只关于最后一个单词的长度,所以开头有多少个空格起始并不需要在意,从字符串末尾开始,先将末尾的空格都去掉,然后开始找非空格的字符的长度即可,参见代码如下:

解法三:

class Solution {
public:
    int lengthOfLastWord(string s) {
        int right = s.size() - 1, res = 0;
        while (right >= 0 && s[right] == ' ') --right;
        while (right >= 0 && s[right] != ' ' ) {
            --right; 
            ++res;
        }
        return res;
    }
};

这道题用Java来做可以一行搞定,请参见这个帖子.

到此这篇关于C++实现LeetCode(58.求末尾单词的长度)的文章就介绍到这了,更多相关C++实现求末尾单词的长度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入解析C++中类的多重继承

    深入解析C++中类的多重继承

    这篇文章主要介绍了深入解析C++中类的多重继承,包括多重继承相关的二义性问题,需要的朋友可以参考下
    2015-09-09
  • C语言实现简单的学生学籍管理系统

    C语言实现简单的学生学籍管理系统

    这篇文章主要为大家详细介绍了C语言实现简单的学生学籍管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • C语言字符串的模式匹配之BF与KMP

    C语言字符串的模式匹配之BF与KMP

    这篇文章记录一下串里面的模式匹配,模式匹配,顾名思义就是给定一个被匹配的字符串,然后用一个字符串模式(模型)去匹配上面说的字符串,看后者是否在前者里面出现。常用的有2种算法可以实现,下面我们来具体探讨下
    2021-09-09
  • C++中的strcmp函数

    C++中的strcmp函数

    strcmp函数是C++标准库中用于字符串比较的重要函数,在C++中,字符串比较是一项常见的操作,用于判断两个字符串是否相等或者大小关系,本文介绍C++中的strcmp函数,感兴趣的朋友一起看看吧
    2024-03-03
  • Qt添加MSVC2017编译器的实现方法

    Qt添加MSVC2017编译器的实现方法

    Qt添加MSVC2017编译器是开发者在Windows平台上进行Qt应用程序开发的重要步骤,本文详细介绍了如何为Qt配置MSVC2017编译器的具体步骤,感兴趣的可以了解一下
    2023-09-09
  • C++中的局部变量、全局变量、局部静态变量、全局静态变量的区别

    C++中的局部变量、全局变量、局部静态变量、全局静态变量的区别

    本文主要介绍了C++中的局部变量、全局变量、局部静态变量、全局静态变量的区别。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • C语言算法练习之数组求素数

    C语言算法练习之数组求素数

    这篇文章主要为大家介绍了C语言算法练习中数组求素数的实现方法,文中的示例代码讲解详细,对我们学习C语言有一定帮助,需要的可以参考一下
    2022-09-09
  • C++ 动态内存分配详解(new/new[]和delete/delete[])

    C++ 动态内存分配详解(new/new[]和delete/delete[])

    这篇文章主要介绍了C++ 动态内存分配详解(new/new[]和delete/delete[]),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • 使用QGraphicsView实现气泡聊天窗口+排雷功能

    使用QGraphicsView实现气泡聊天窗口+排雷功能

    这篇文章主要介绍了使用QGraphicsView实现气泡聊天窗口+排雷,重点给大家介绍使用QWebEngineView控件内嵌html+CSS的实现方式,需要的朋友可以参考下
    2022-04-04
  • C++静态变量,常量的存储位置你真的了解吗

    C++静态变量,常量的存储位置你真的了解吗

    这篇文章主要介绍了C++中静态变量与常量的存储位置的相关资料,需要的朋友可以参考下,希望能够给你带来帮助
    2021-08-08

最新评论