文内代码全部采用JAVA语言。
题目
给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。说明:一个单词是指由字母组成,但不包含任何空格的字符串。
示例:
输入: "Hello World"
输出: 5
个人解法
看到评论区很多小伙伴疑惑,其实题目中指的 “不存在最后一个单词” 指的其实是:字符串全都是 空格 或者是 空字符串 这种里面没有单词的情况。比如 "Hello World"和"Hello World "在这里最后一个单词都是world,哪怕world后面空格再多,也是最后一个单词。
首先想到的是按照空格对字符串进行分片,也就是用split,分片后计算最后一个子字符串的长度即可。用三元运算符控制没有单词时的返回值。
执行用时: 7 ms, 在Length of Last Word的Java提交中击败了31.16% 的用户
效果马马虎虎,不算太好。
public int lengthOfLastWord(String s) {
String[] array=s.split(" ");
return (array.length==0) ? 0:array[array.length-1].length();
}
大神解法
本题依然没有官方解法。观摩评论区大神。
思路
去掉首尾空格之后,查找最后一个空格的位置,再做减法。
非常巧妙。
算法
执行用时: 5 ms, 在Length of Last Word的Java提交中击败了71.22% 的用户。
相当优秀了!
class Solution {
public int lengthOfLastWord(String s) {
s = s.trim();
return s.length() - 1 - s.lastIndexOf(' ');
}
}
思路简单,不做赘述。