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


  • 相关阅读:
    Linux文件系统
    Linux用户和用户管理
    Linux磁盘管理
    vi编辑器
    Linux常用命令
    Linux进程管理
    servlet运行过程
    http的get和post方法的区别
    千元机小荐
    JavaScript 正则表达式(Reg Exp)
  • 原文地址:https://www.cnblogs.com/AlvinZH/p/8583934.html
Copyright © 2011-2022 走看看