1. 程式人生 > >演算法的實戰(十六):length-of-last-word

演算法的實戰(十六):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;


}