一 题目描述
给定一个仅包含大小写字母和空格 ' '
的字符串,返回其最后一个单词的长度。
如果不存在最后一个单词,请返回 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;
}