呆萌程序员
算法养成记
LeetCode58
Length of Last Word
Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the length of last word (last word means the last appearing word if we loop from left to right) in the string.
If the last word does not exist, return 0.
Note: A word is defined as a maximal substring consisting of non-space characters only.
Example:
Input: "Hello World"
Output: 5
中文意思就是:
给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。
如果不存在最后一个单词,请返回 0 。
说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。
示例:
输入: "Hello World"
输出: 5
偷个懒,也是一个很不要脸的方法:
Java字符串中带有方法split(String regex),将字符串按照regex拆分成字符串数组;
所以将字符串根据空格拆分成数组,之后统计最后一个字符串长度即可。
我们目的是计算最后一个单词的长度。
所以需要两个指针
指针1:从后往前找,找到第一个不为空的位置;
指针2:在指针1的基础上,继续往前找,找到第一个为空的位置;
两个指针相减,则为最后一个单词长度。
定义一个变量length,从后遍历,遇到不为空的字符就加1;
遇到空,且长度不为0,则返回;
这里有个问题,有一起学习的小伙伴给出下面的方法:
差别就在于,将字符串转成了字符数组,之后再遍历字符数组。这里也不是说不可以。我们可以看到String在Java中的源码,值就是使用 char数组存储的,也就是字符串字符是可以随机取得,没必要再转成字符数组。
我们也可以看看toCharArray()具体干了什么;
从下图源码我们可以看到,它是复制了原字符串中,新返回了一个字符数组,总体来说代价是不划算的。
在实际测试里
执行用时分别是:0ms,0ms,0ms
内存消耗分别是:37.7MB,37.6MB,37.8MB
添加微信进群学习:miraclesComing
数据结构算法不用抖,
大厂面试笔试不用愁!