这是我参与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码呢,可能这就是固有思想的问题吧,要多接触接触各类问题了,不能总是用固用思维。