当前位置:   article > 正文

算法leetcode|58. 最后一个单词的长度(rust重拳出击)_输入一个字符串s,由若干个单词组成,单词前后用一些空格字符隔开。返回字符串中最

输入一个字符串s,由若干个单词组成,单词前后用一些空格字符隔开。返回字符串中最


58. 最后一个单词的长度:

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。

单词 是指仅由字母组成、不包含任何空格字符的最大子字符串

样例 1:

输入:
	
	s = "Hello World"
	
输出:
	
	5
	
解释:
	
	最后一个单词是“World”,长度为5。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

样例 2:

输入:
	
	s = "   fly me   to   the moon  "
	
输出:
	
	4
	
解释:
	
	最后一个单词是“moon”,长度为4。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

样例 3:

输入:
	
	s = "luffy is still joyboy"
	
输出:
	
	6
	
解释:
	
	最后一个单词是长度为6的“joyboy”。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

提示:

  • 1 <= s.length <= 104
  • s 仅有英文字母和空格 ’ ’ 组成
  • s 中至少存在一个单词

分析:

  • 面对这道算法题目,二当家的再次陷入了沉思。
  • 如果对语言的API比较熟,可能想到直接用空格分割字符串,然后取最后一个字符串的长度即可,但其实执行效率并不是很好,因为这种方式相当于必然遍历解析整个字符串,相当于处理了所有单词,事实上我们只需要遍历一个单词就可以了,但是API战士可以非常轻松愉快,很难不被吸引。
  • 从后向前逆序逐个遍历字符是个好办法,尤其是在处理一个包含很多单词的长字符串时,相较于使用API按空格分割字符串的方式,效率优势非常明显。
  • 提示说参数至少有一个单词,而且仅有字母和空格,所以想要找到最后一个单词的边界,判断空格就成为了关键。
  • 从后向前找到第一个非空格字符(必然是英文字母,即单词的一部分)作为末尾(相当于跳过末尾的空格字符),再继续找到第一个空格字符或者直到字符串的开始位置作为起始,之间就是最后一个单词。
  • 题解中rust直接一句到底,感觉非常直观,非常爽快,酷酷的,python作为开发效率的代表,真是不带一点多余的废话,就不那么要求它的执行效率了,其他语言都中规中矩,很容易看懂,但是略显啰嗦。
  • 各有优势,没有绝对,但是可以有自己的喜好,存在即合理。

题解:

rust:

impl Solution {
    pub fn length_of_last_word(s: String) -> i32 {
        s.as_bytes().iter()
            .rev()
            .skip_while(|&&c| c == b' ')
            .take_while(|&&c| c != b' ')
            .count() as i32
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

go:

func lengthOfLastWord(s string) (ans int) {
	index := len(s) - 1
	for s[index] == ' ' {
		index--
	}
	for index >= 0 && s[index] != ' ' {
		ans++
		index--
	}
	return
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

c++:

class Solution {
public:
	int lengthOfLastWord(string s) {
		int index = s.size() - 1;
		while (s[index] == ' ') {
			--index;
		}
		int ans = 0;
		while (index >= 0 && s[index] != ' ') {
			++ans;
			--index;
		}
		return ans;
	}
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

python:

class Solution:
    def lengthOfLastWord(self, s: str) -> int:
        return len(s.rstrip().split(" ")[-1])

  • 1
  • 2
  • 3
  • 4

java:

class Solution {
	public int lengthOfLastWord(String s) {
		int index = s.length() - 1;
		while (s.charAt(index) == ' ') {
			--index;
		}
		int ans = 0;
		while (index >= 0 && s.charAt(index) != ' ') {
			++ans;
			--index;
		}
		return ans;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/527169
推荐阅读
相关标签
  

闽ICP备14008679号