LeetCode-lengthOfLastWord

题目是求一个字符串中,最后一个单词的长度

例如:

"" = 0

"  " =0

"length of last word    " = 4

这个题目主要的坑在哪里呢,就是要判断一些特殊的情况,这里例举一下:

1.空字符串以及 NULL 判断是必须的。

2.字符串为一个或多个空格,或者最后一个单词后面又跟了空格

 1 class Solution {
 2 public:
 3     int lengthOfLastWord(const char *s) {
 4         if (s == NULL) {
 5             return 0;
 6         }
 7
 8         int result = 0;
 9
10         // 当前字符 没结束
11         while (*s != ‘\0‘) {
12             if (*s == ‘ ‘) {
13                 while (s != NULL && *s == ‘ ‘) {
14                     s++;
15                 }
16             }
17             else {
18                 int cur = 0;
19                 while (*s != ‘\0‘ && *s != ‘ ‘) {
20                     cur++;
21                     s++;
22                 }
23                 result = cur;
24             }
25         }
26         return result;
27     }
28 };

上述代码通过了 Leetcode,如果传递的 字符串是一个obj,还可以通过获取obj.length 从后往前面查找,这里是只传递一个起始的字符指针。

首先进行NULL值的判断,然后当指针 s 不为结束符号 ‘\0‘ 进行遍历,遍历的时候,只有两种情况,一个是遇到空格,另一个是遇到字符,。

遇到的空格可能有多个,即连续的空格,这个时候,可以选择将空格“吃掉”,即多个空格也抽象成一个空格处理。

遇到字符时,即表示,当前是一个单词,至于这个单词有多长,我们一直往后面搜索就可以了,同时用一个临时变量 cur 来保存当前 word 的长度 ,s 遇到空格或者结束符号 ’\0‘ 就先停下来,形成一个 word,然后把 word 传值给 result,因为遇到了空格,所以将接下来的任务交给处理空格的 if 判断来处理。

算法总体上抽象为两个分支,遇到空格的情况,以及遇到字符,每次形成一个word,则将其赋值给 result,为什么要用临时变量 cur 呢?

因为如果在 空格判断中另 result = 0,word 判断中 result= word.length,那么就会出现bug,这种bug出现在 字符串尾部有空格的情况下。

时间: 2024-10-13 02:33:01

LeetCode-lengthOfLastWord的相关文章

leetcode-Maximum Subarray

https://leetcode.com/problems/maximum-subarray/ Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given the array [−2,1,−3,4,−1,2,1,−5,4],the contiguous subarray [4,−1,2,1] has the l

leetcode--C语言 指针

虽然C语言用了挺久,自以为指针也学的不错.最近都在写O-C,最近开始重拾C语言,发现自己关于C中的堆栈并没有完全理解. C中的函数malloc: struct ListNode* head = (struct ListNode *)malloc(sizeof(struct ListNode)); malloc()从堆里面获得空间,将这块堆空间的地址赋值给指针.也就是说函数返回的指针是指向堆里面的一块内存.操作系统中有一个记录空闲内存地址的链表.当操作系统收到程序的申请时,就会遍历该链表,然后就寻

leetcode--3

1. 题目: Longest Substring Without Repeating Characters Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which th

LeetCode(24) - Swap Nodes in Pairs

题目要求很简单,就是把list里面的node两两互换. 当做比较复杂的LinkedList的题目的时候,最好是在草稿纸上画一画,走一遍流程,凭空想很容易会出错.这一题时LeetCode 25的k=2特殊例子,所以要简单很多.用两个node,一前一后,然后两两交换就好,细节上注意的是交换后两个node前面和后面是否各自连接上.最好自己在纸上走一遍,防止出错. 代码如下: 1 /** 2 * Definition for singly-linked list. 3 * public class Li

LeetCode(4) - Median of Two Sorted Arrays

题目要求很简单,就是给你两个已经排好序的数组nums1(长度为m)和nums2(长度为n),找出他们的中间值.返回值类型double是因为如果数字个数是偶数个,就要返回中间两个数的平均值.这题最简单的方法就是通过两个指针分别从nums1和nums2的头一直移动,直到走到nums1和nums2的中值位置为止.整个过程耗时大概是O((m+n) / 2).但是题目附带需要用O(log(m+n))的时间完成,所以上述方法就不能用了.能用到O(log(m+n))的方法在leetcode的算法题里面没有几个

LeetCode(6) - ZigZag Conversion

这个题的要求是给你一个字符串,和一个行数,例如(s = "mysisteristhemostlovelygirl" , row = 4),每一行一个字符串,但是s却得按照zigzag的方式重排序到这4行的字符串里,什么意思呢? 看例子大概就懂了: m e e   o   i y t r h m l v g r s s i t o t e y l i   s s   l 第一列开始往下走,走到第四行就往上走(第二列),走回第一行就重新往下走,如此类推,最后的输出就是每一行的叠加,也就是:

LeetCode 62/63/120 Unique PathsI/II Triangle--DP

一:unique Path 题目: A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (ma

[leetcode] Symmetric Tree--二叉树遍历的应用

题目: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For example, this binary tree is symmetric: 1 / 2 2 / \ / 3 4 4 3 But the following is not: 1 / 2 2 \ 3 3 分析: 题目是要判断左右两颗子树是否对称,采用只要根节点的值相同,并且左边子树的左子树和右

LeetCode(15) - 3Sum

这道题给你一个数组,找到所有三个数加起来等于0的数字并存到List里.暴力搜索的话大概要耗费O(n^3)的时间,但是如果这个数组是有序的话,搜索起来就会相对简单,排序大概要花费O(nlog(n))的时间,有序搜索只需要花费O(n^2)的时间,所以,思路是这样: 先排序. 外循环i纪录第一个数字,内循环采用2 pointer的方法,当sum>0,tail往左移,sum < 0,head往右移. 碰到sum = nums[i] + nums[head] + nums[tail]时,把三个数字存到l