zoukankan      html  css  js  c++  java
  • 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和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.


  • 相关阅读:
    1014. 福尔摩斯的约会
    1009. 说反话
    1002. 写出这个数
    1031. 查验身份证
    1021. 个位数统计
    1006. 换个格式输出整数
    1058. A+B in Hogwarts
    1027. Colors in Mars
    1019. General Palindromic Number
    Windows 新装进阶操作指南
  • 原文地址:https://www.cnblogs.com/AlvinZH/p/8583934.html
Copyright © 2011-2022 走看看