[每日一题] [力扣58] 最后一个单词的长度 2021.9.21

题目描述

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。

单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

示例 1:

输入:s = "Hello World"
输出:5

示例 2:

输入:s = "   fly me   to   the moon  "
输出:4

示例 3:

输入:s = "luffy is still joyboy"
输出:6

提示:

1 <= s.length <= 104
s 仅有英文字母和空格 ' ' 组成
s 中至少存在一个单词

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/length-of-last-word
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路解法

遇到字符串问题我的几个想法是:

  1. 二分查找空格
    字符串是非有序数组,所以如何二分查找
  2. 双指针
    如何确认前进还是后退?
  3. 位运算(加快运算速度)
    (todo) 位运算加快速度的调查与研究
  4. 递归查找空格
    10^4 这么多的数据栈空间够用不够用?
    (todo) 一个递归函数可以被嵌套多深?
  5. 暴力法

暴力法试试。

class Solution {
public:
    int lengthOfLastWord(string s) {
        int begin = 0;
        int end   = -1;

        auto IsSpace = [](char &c) -> bool { return (c == ' '); };
        bool is_space;
        for (int i = s.size() - 1; i >= 0; i--) {
            is_space = IsSpace(s[i]);
            if (is_space) {
                if (end == -1) {
                    continue;
                } else {
                    begin = i;
                    break;
                }
            } else {
                if (end == -1) {
                    end = i;
                }
            }
        }
        if (s[begin] != ' ') {
            return (end - begin) + 1;
        }
        return (end - begin);
    }
};
上一篇:React-58:组件通信总结


下一篇:剑指 Offer 58 - I. 翻转单词顺序