LeetCode 58. Length of Last Word

问题链接

LeetCode 58. Length of Last Word

题目解析

求得字符串的最后一个单词的长度。

解题思路

如果从前往后遍历的话,近乎暴力了,先得去除前后空格,遍历时遇到空格计数器清零,最后计数器的值即答案。不建议这样做,费时又费力。

明明可以从后往前遍历的,明显高了一个档次,只需要去除结尾空格,计数器遇到空格停止,此时答案也出来了,这样多快呢!

参考代码

class Solution {
public:
    int lengthOfLastWord(string s) {
        int right = s.length()-1, res = 0;
        while(right >= 0 && s[right] == ' ')
            right--;
        while(right >= 0 && s[right] != ' ') {
            right--;
            res++;
        }
        return res;
    }
};

快速解法

在JAVA或者Python中,已经有相应的内设函数可以直接使用。不过这样就没有练习效果了,若是搞懂了所用函数的原理,那也是极好的,万一面试官问你你用的函数具体是如何实现的,那不是gg了。

一行代码解决:https://leetcode.com/problems/length-of-last-word/discuss/21878/a-single-line-of-code-in-java

一行JAVA代码分析

其中用到两个函数,trim 函数的作用是去除字符串首尾的空格,具体实现也是常规遍历两边字符进行删除;lastIndexOf 函数 的作用是返回指定字符在此字符串中最后一次出现处的索引,没有返回-1。

class Solution {
    public int lengthOfLastWord(String s) {
        return s.trim().length()-s.trim().lastIndexOf(" ")-1;
    }
}

一行JAVA代码分析

split函数非常的好用,在C++中却没有实现,可以说很sad了。spilit 函数 的作用是根据匹配给定的正则表达式来拆分字符串,返回的是分割后的字符串数组。先判断分割后有没有单词,再取最后一个单词的长度即可。

class Solution {
    public int lengthOfLastWord(String s) {
        return (s.split(" ").length == 0) ? 0 : s.split(" ")[s.split(" ").length-1].length();
    }
}

LeetCode All in One题解汇总(持续更新中...)

本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.


posted @ 2018-03-16 18:16  AlvinZH  阅读(359)  评论(0编辑  收藏  举报