ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第34期:最后一个单词的长度(高频)

2021-01-27 23:04:50  阅读:109  来源: 互联网

标签:trim 空格 int count 34 单词 length 高频


我准备了 1000 本电子书和计算机各领域高清思维导图 100 张,关注后回复【资源】,即可获取!更可回复【内推】加入 BAT 内推群!
第34期:最后一个单词的长度(高频)

01、题目示例


这是一道简单题,只需要普通的遍历就可以完成。不过会遇到一些坑,如果不注意,还是挺容易出错的。


第58题:最后一个单词的长度


给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。


示例:

输入: "Hello World" 
输出: 5

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

02、题解分析


因为我们要获取的是最后一个单词的长度,不难想到可以从尾开始遍历。

题中的陷阱在于,结尾处仍然可能有空格。

所以一般的解题思路为,先去掉末尾的空格,然后从尾向前开始遍历,直到遇到第一个空格处结束。

但这里可以取一个巧,我们可以通过一个 count 来记数,从第一个不为空格的数开始记起。换句话说,如果末尾处为空格,此时 count 值为 0,可以直接略过。
第34期:最后一个单词的长度(高频)

实现代码如下:


//JAVA
class Solution {    
    public int lengthOfLastWord(String s) {        
        if(s == null || s.length() == 0) return 0;        
        int count = 0;        
        for(int i = s.length()-1; i >= 0; i--){            
            if(s.charAt(i) == ' '){                
                if(count == 0) continue;               
                break;           
            }            
            count++;      
        }        
        return count;          
    }
}

当然,并不是说我们不能直接用 API,来进行一些“机智”的解题,大不了就是被挂。

//java
class Solution {
    public int lengthOfLastWord(String s) {
        s = s.trim();
        int start = s.lastIndexOf(" ") + 1;
        return s.substring(start).length();
    }

}
这个代码应该大家都能看懂,首先 trim 掉两边的空格,然后直接定位到最后一个单词的位置,将其截取下来获取长度。

额。既然我们 trim 都用了,那为什么我们不直接使用 split 得到最后一个单词的长度呢?

//java
public class Solution {
    public int lengthOfLastWord(String s) {
        String[] words = s.split(" ");
        if (words.length < 1) return 0;
        return words[words.length - 1].length();
    }
}

03、函数学习


上面的题解中用到了 trim,那 trim 除了去除两边的空格,是否还会去除其他字符呢?一起来看下 trim 的源码。

//JAVA
public String trim() {  
    int len = value.length;  
    int st = 0;  
    char[] val = value;    /* avoid getfield opcode */  
    while ((st < len) && (val[st] <= ' ')) {      
        st++;  
    }  
    while ((st < len) && (val[len - 1] <= ' ')) {      
        len--;  
    }  
    return ((st > 0) || (len < value.length)) ? substring(st, len) : this;
}

可以看到,Java 中的 trim 函数除了去除空格之外,还去除了所有在 ASCII 码表中排行小于等于空格的字符。
第34期:最后一个单词的长度(高频)

空格在 ASCII 码表中排行是 32位,可以看到 tab,换行,回车等都在 trim 的控制范围内。

标签:trim,空格,int,count,34,单词,length,高频
来源: https://blog.51cto.com/15076236/2608550

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有