春招打卡d10n17-leetcode刷题58最后一个单词的长度

139 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

leetcode刷题58.最后一个单词的长度

前文

本题为查找类型题目,题目序号为58,主要考察以什么方式能够最快找到目标字符串。

题目信息

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

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

解题思路

根据题目信息可知,本题目主要目的在于从已给字符串中找到符合要求的字符串,且需要找到最后一个不包含空格字符串。按照常规思想来说,可能是先将字符串拆分,形成新的数组,获取数组的最后一个值,即可得到目标结果。而本题的解决方案此处采用循环的方式。将给定的字符串作为char数组进行遍历操作,遍历顺序为倒叙。当遇到第一个非空字符串时记录终点位置,当遇到下一个空字符串时记录起点位置,二者相减即可得到目标字符串的长度。注意由于可能存在字符串中无结尾空字符串的情况,因此要将起点默认是这为-1。以此方式即可得到目标解题答案。

解题代码

public int lengthOfLastWord(String s) {
    int length = s.toCharArray().length;
    if(length == 0){
        return 0;
    }
    boolean begin = false;
    int end = length - 1;
    int start = -1;
    for (int i = length - 1; i >= 0; i--) {
        if(!begin && !" ".equals(String.valueOf(s.charAt(i)))){
            end = i;
            begin = true;
        }
        if(begin && " ".equals(String.valueOf(s.charAt(i)))){
            start = i;
            begin = false;
            break;
        }
    }
    return end - start;
}

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。