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