为学校网站做网站推广策划书,wordpress文章所有图片,响应式网站开发实例,山西响应式网站设计目录
题目链接#xff1a;58. 最后一个单词的长度 - 力扣#xff08;LeetCode#xff09;
题目描述
示例
提示#xff1a;
解法一#xff1a;反向遍历
Java写法#xff1a;
C写法#xff1a;
解法二#xff1a;逆天解法
思路
存在的问题
总结 题目链接58. 最后一个单词的长度 - 力扣LeetCode
题目描述
示例
提示
解法一反向遍历
Java写法
C写法
解法二逆天解法
思路
存在的问题
总结 题目链接58. 最后一个单词的长度 - 力扣LeetCode
注下述题目描述和示例均来自力扣 题目描述
给你一个字符串 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 10^4s 仅有英文字母和空格 组成s 中至少存在一个单词 解法一反向遍历
去除尾部的空格 使用std::string的find_last_not_of方法找到最后一个不是空格的字符的索引。然后使用erase方法从该索引的下一个位置开始删除直到字符串末尾这样就去除了尾部的所有空格。检查字符串是否为空 调用empty方法来检查处理后的字符串是否为空。如果为空说明原字符串只包含空格没有实际的单词因此返回0。查找最后一个空格的位置 使用find_last_of方法在字符串中查找最后一个空格的索引。如果找不到空格即返回std::string::npos说明整个字符串就是一个单词或者整个字符串为空但已经在第2步中处理过了。计算最后一个单词的长度 如果找到了空格那么最后一个单词就是空格之后的部分。因此最后一个单词的长度就是字符串的总长度减去最后一个空格的索引再减1因为索引是从0开始的且我们不希望包括空格本身在内。如果没有找到空格说明整个字符串就是一个单词直接返回字符串的长度即可。
这个思路的关键在于先对字符串进行预处理去除尾部空格然后利用字符串的查找功能来定位最后一个空格的位置最后根据这个位置来计算最后一个单词的长度。这种方法既简单又高效能够很好地解决问题。 Java写法
class Solution {public int lengthOfLastWord(String s) {// 去除字符串尾部的空格 s s.trim(); // 如果字符串为空则最后一个单词的长度为0 if (s.length() 0) { return 0; } // 从字符串末尾开始向前遍历找到最后一个空格的位置 int length 0; for (int i s.length() - 1; i 0; i--) { // 如果当前字符不是空格则增加单词长度 if (s.charAt(i) ! ) { length; } // 如果当前字符是空格且已经计算过单词长度即length不为0则跳出循环 else if (length 0) { break; } } return length; }
} C写法
class Solution {
public:int lengthOfLastWord(string s) {// 去除字符串尾部的空格 s.erase(s.find_last_not_of( ) 1); // 如果字符串为空则最后一个单词的长度为0 if (s.empty()) { return 0; } // 从字符串末尾开始向前遍历找到最后一个空格的位置 size_t lastSpaceIndex s.find_last_of( ); if (lastSpaceIndex std::string::npos) { // 如果没有找到空格说明整个字符串就是一个单词 return s.length(); } else { // 返回最后一个单词的长度 return s.length() - lastSpaceIndex - 1; } }
}; 解法二逆天解法
这题还是很简单的嘛但是我看见逆天网有的逆天代码了额如下
class Solution {public int lengthOfLastWord(String s) {return s.trim().length()-s.trim().lastIndexOf( )-1;}
}
思路
去除首尾空格使用 trim() 方法去除字符串 s 首尾的所有空格字符。计算总长度使用 trim() 方法后的字符串的 length() 方法来获取去除空格后的字符串长度。查找最后一个空格的位置再次使用 trim() 方法注意这里实际上是多余的因为 trim() 已经在前一步调用过了但在这个表达式中它会再次执行后的字符串的 lastIndexOf( ) 方法来查找最后一个空格的索引。计算单词长度通过总长度减去最后一个空格的索引需要再减1因为索引是从0开始的并且我们不想包括空格在内来尝试获取最后一个单词的长度。
存在的问题 多余的 trim() 调用在表达式中s.trim() 被调用了两次这是不必要的因为它增加了不必要的计算开销并且如果 trim() 方法有副作用尽管在这个场景中它没有那么这种用法可能会引入问题。 错误处理最后一个单词如果字符串的最后一个字符不是空格即整个字符串就是一个单词或者除了最后一个单词外没有其他空格那么 lastIndexOf( ) 将返回 -1因为找不到空格。此时length() - (-1) - 1 会导致错误的计算结果因为 length() - (-1) 实际上是字符串的总长度加1这显然是不正确的。 总结 一个算法的实现方式很多比如如果你这里使用python来解决的话会有一些方法可以直接去除长空格然后你就可以切割字符串了最后取出最后一个值不就好啦~~