/* * @lc app=leetcode.cn id=58 lang=c * * [58] 最后一个单词的长度 * * https://leetcode-cn.com/problems/length-of-last-word/description/ * * algorithms * Easy (28.96%) * Total Accepted: 18.8K * Total Submissions: 65K * Testcase Example: '"Hello World"' * * 给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。 * * 如果不存在最后一个单词,请返回 0 。 * * 说明:一个单词是指由字母组成,但不包含任何空格的字符串。 * * 示例: * * 输入: "Hello World" * 输出: 5 * * */ int lengthOfLastWord(char* s) { int count=0; for(int i=strlen(s)-1;i>=0;i--){ if(s[i]!=' ') count++; else if(count) break; } return count; }
这道题的思路是,数组逆序查找,如果当前的值不是空格,就把计数器加一,如果是空格的话就break。
但是如果这么写的话就考虑不到后面几位是空格的情况。
所以加了一句 else if(count) break;
其实就是把多种情况融合成一种,就是当我们的计数器等于一的时候会有两种情况:
1.这个字符刚刚开始,我们刚统计。
2.这个字符只有一个,下一个就是空格,我们就统计完了。
所以说接下来的判断就是如果有其他的字符的话,就继续计数器加一,没有的话,我们的计数器等于一,意味着下一位是空格,工作结束,直接break返回1即可。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
python:
# # @lc app=leetcode.cn id=58 lang=python3 # # [58] 最后一个单词的长度 # # https://leetcode-cn.com/problems/length-of-last-word/description/ # # algorithms # Easy (28.96%) # Total Accepted: 18.8K # Total Submissions: 65K # Testcase Example: '"Hello World"' # # 给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。 # # 如果不存在最后一个单词,请返回 0 。 # # 说明:一个单词是指由字母组成,但不包含任何空格的字符串。 # # 示例: # # 输入: "Hello World" # 输出: 5 # # # class Solution: def lengthOfLastWord(self, s: str) -> int: a = s.split(' ') a.reverse() for ss in a: if ss!='': return len(ss) return 0
python相对来说就很灵活了,先用split,按空格分开,形成一个数组,然后还是逆序(直接用reverse了) 然后在里面找到第一个不等于空格的就返回就可以了。