算法leetcode|58. 最后一个单词的长度(rust重拳出击)

这篇具有很好参考价值的文章主要介绍了算法leetcode|58. 最后一个单词的长度(rust重拳出击)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。



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

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

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

样例 1:

输入:
	
	s = "Hello World"
	
输出:
	
	5
	
解释:
	
	最后一个单词是“World”,长度为5。

样例 2:

输入:
	
	s = "   fly me   to   the moon  "
	
输出:
	
	4
	
解释:
	
	最后一个单词是“moon”,长度为4。

样例 3:

输入:
	
	s = "luffy is still joyboy"
	
输出:
	
	6
	
解释:
	
	最后一个单词是长度为6的“joyboy”。

提示:

  • 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
    }
}

go:

func lengthOfLastWord(s string) (ans int) {
	index := len(s) - 1
	for s[index] == ' ' {
		index--
	}
	for index >= 0 && s[index] != ' ' {
		ans++
		index--
	}
	return
}

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;
	}
};

python:

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


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;
	}
}

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


到了这里,关于算法leetcode|58. 最后一个单词的长度(rust重拳出击)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 算法leetcode|79. 单词搜索(rust重拳出击)

    算法leetcode|79. 单词搜索(rust重拳出击)

    给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

    2024年02月09日
    浏览(8)
  • 算法leetcode|30. 串联所有单词的子串(rust重拳出击)

    给定一个字符串 s 和一个字符串数组 words 。 words 中所有字符串 长度相同 。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如,如果 words = [\\\"ab\\\",\\\"cd\\\",\\\"ef\\\"] , 那么 \\\"abcdef\\\" , \\\"abefcd\\\" , \\\"cdabef\\\" , \\\"cdefab\\\" , \\\"efabcd\\\" , 和 \\\"efcdab\\\" 都是串联子串。

    2023年04月08日
    浏览(8)
  • 【LeetCode】每日一题&最后一个单词的长度&投票法求解多数元素&异或操作符巧解只出现一次的数字&整数反转

    ========================================================================= 个人主页直达: 小白不是程序媛 LeetCode系列专栏: LeetCode刷题掉发记 ========================================================================= 目录 LeetCode 58.最后一个单词的长度 LeetCode169.多数元素 LeetCode 136.出现一次的数字 LeetCode 7.整数

    2024年02月08日
    浏览(9)
  • 最后一个单词的长度

    58. 最后一个单词的长度 给你一个字符串  s ,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中  最后一个  单词的长度。 单词  是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1: 示例 2: 示例 3: 提示: 1 = s.length = 104 s  仅有英文字母和空

    2024年02月20日
    浏览(11)
  • Rust每日一练(Leetday0020) 最后单词的长度、螺旋矩阵II、排列序列

    Rust每日一练(Leetday0020) 最后单词的长度、螺旋矩阵II、排列序列

    目录 58. 最后一个单词的长度 Length of Last Word  🌟 59. 螺旋矩阵 II Spiral Matrix II  🌟🌟 60. 排列序列 Permutation Sequence  🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你一个字符串  s ,由

    2024年02月10日
    浏览(19)
  • 【面试经典 150 | 数组】最后一个单词的长度

    【面试经典 150 | 数组】最后一个单词的长度

    本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾与总结,文章结构大致如下,部分内容会有增删: Tag:介绍本题牵涉到的知识点、数据结构; 题目来源:

    2024年04月22日
    浏览(15)
  • 【C++ OJ练习】5.字符串最后一个单词的长度

    【C++ OJ练习】5.字符串最后一个单词的长度

    字符串最后一个单词的长度_牛客题霸_牛客网 倒着找第一个空格的下标 用下标之间的差来计算  【C++ OJ练习】5.字符串最后一个单词的长度 完

    2024年02月13日
    浏览(20)
  • 『力扣每日一题07』字符串最后一个单词的长度

    气死我啦,今天这道题花了快一个小时,我学完了答案的解法,放上去在线 OJ ,一直报错,找来找去都找不到自己错在哪,明明跟答案一模一样。后来还是学了另一种解法,才跑出来的(°̥̥̥̥̥̥̥̥o°̥̥̥̥̥̥̥̥)   后来我对比了两种写法,复盘了一下,应该是第一种解法

    2024年02月09日
    浏览(14)
  • 算法leetcode|66. 加一(rust重拳出击)

    给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储 单个 数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 1 = digits.length = 100 0 = digits[i] = 9 面对这道算法题目,二当家的再次陷入了

    2024年02月14日
    浏览(11)
  • 算法leetcode|71. 简化路径(rust重拳出击)

    给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 \\\'/\\\' 开头),请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中,一个点( . )表示当前目录本身;此外,两个点 ( .. ) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相

    2024年02月12日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包