算法的实战(十六):LeetCode -- length-of-last-word

一 题目描述

给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。

如果不存在最后一个单词,请返回 0 。

说明:一个单词是指由字母组成,但不包含任何空格的字符串。

示例:

输入: "Hello World"
输出: 5

二 解题思路

1.先判断str是否为空或者null,若是,返回0

2.调用String.split进行对“ ”进行分割,得到数组,如果得到的数组的长度为0,则返回0;否则,然后数组最后一个索引的值的长度

三 代码实战

public static int lengthOfLastWord(String s) {
        if(s==null||s.isEmpty()){
            return 0;
        }
        String[] strs = s.split(" ");

        System.out.println("length:"+strs.length);
        if(strs.length<1){
            return 0;
        }
        return strs[strs.length-1].length();
    }

四 优化点

我上述代码是调用split的方法,这方法其实对整个str进行遍历,时间复杂度无论如何都已经是O(n),其实本题是要拿最后一个单词的长度,其实我们可以直接从最尾部进行遍历,这样最好的情况是O(l)(l是指最后一个单词的长度),最坏的情况也是O(n),代码实例如下:

 public static int lengthOfLastWord(String s) {

        if(s==null || s.length()==0)
            return 0;
        int len = s.length();
        int count = 0;
        for(int i=len-1;i>=0;i--){
            if(s.charAt(i)!=' '){
                count++;
            }else if(s.charAt(i)==' '&& count!=0){
                return count;
            }
        }
        return count;


}

猜你喜欢

转载自blog.csdn.net/m0_38082440/article/details/82957173