LeetCode58-最后一个单词的长度 | 算法练习系列

218 阅读2分钟

这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战

前言

今天又到了周五了,大早上睡过头了,九点半上班睡到了九点,上班需要一个小时,妥妥的迟到,衰的一天从迟到开始,今天来分享一道简单算法题,重要的思路,思路,思路

题目描述

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

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

  示例 1:

输入:s = "Hello World"

输出:5

示例 2:

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

输出:4

示例 3:

输入:s = "luffy is still joyboy"

输出:6

解题思路

  • 打开本题乍一看题目描述这么少,肯定是个简单的题目,事实也的确如此
  • 我看到这道题目的第一反应就是找出普通字符和空格的区别,很直接的我就想到了ASCII码,于是我就开始了把整个字符串转为ASCII码,然后从后往前删除ASCII为32的项,当遇到到不少32的就开始计数,直到再次遇到是32的情况结束,美滋滋,解决问题
  • 写着写着发现我还要加一个开关,因为如果刚开始是32,那我肯定是不计数的,当计数之后再遇到32我就要直接结束,所以需要一个开关,当要不是32的时候打开开关,当再次遇到32并且开关是开的情况下再结束
  • 虽然得到了结果,但感觉好复杂啊,于是我又想了想,是否可以直接处理字符串,我直接从后往前来判断字符串的每一项是不是空格,如果是就移动,知道不是的时候,得到下标,再开始移动,如果又遇到了空格就结束,代码如下
var lengthOfLastWord = function(s) {
    let index = s.length-1
    let result = 0
    while(s[index]===' '){//为了得到最后一个字符串的结束位置的下标
        index--
    }
    while(index>=0&&s[index]!==' '){
        result++
        index--
    }
    return result
};

总结

其实不论是否把字符串处理成ASCII码,之后的操作都是一样的操作,只是一个比较的是ASCII,一个比较的是空格,但为什么我的第一反应就是转化为ASCII码呢,可能这就是固有思想的问题吧,要多接触接触各类问题了,不能总是用固用思维。