LeetCode-434. Number of Segments in a String

Description
Count the number of segments in a string, where a segment is defined to be a contiguous sequence of non-space characters.

Please note that the string does not contain any non-printable characters.
Example:
Input: "Hello, my name is John" Output: 5
题目分析

本题中要求计算字符串中段(segment)的个数,例如:
str[]="Hello, my name is John" return 5;
字符串石头人中由4个空格将字符串分割为5部分,每部分均由连续的非空字符构成,因此返回5。
这里的段(segment)可以理解为“单词”,但是需要注意的是一般意义上的单词并不包含后边接着的标点符号。而这里的如果标点符号与单词字母之间没有空格,则认为标点符号也属于“单词”的一部分,属于同一个段(segment).例如Hello,单词hello后边的逗号与o之间并没有空格,而是紧挨在一起,因此hello,同属一段(segment)。

解题思路
本题字符串中各段与段之间均有空格符分开,而且字符串中不含有非可打印字符。通过逐个扫描字符串中的字符,如果发现空格,则段数加一,直到字符串最后的’\0’。但是如果让字符串中出现连续的空格就会使上述方法失效。因此,我们需要同时判断两个字符,如果前一个字符不是空格,而当前字符为空格则,段数加一,这种方法可以处各理段之间以空格隔开(包括单个空格与连续多个空格)和最后一段后接空格的情况。

特殊情况:
(1) 最后一段的判断。字符串均是以’\0’结尾,因此最后一段后通常不跟空格,而是跟’\0’。因此,若当前字符不为空,而下一个字符你是’\0′,则段数加一。
(2) 字符串为空字符串。此时直接返回0。
(3) 字符串只含有一个字符且不是空格。对于长度为一的字符串,若其内容不是空格,则返回1。
(4) 字符串中仅由空格组成(包括单个空格和多个空格)。字符串段数,初始值为0,对于空格字符串,由于不含有非空格字符,不满足段数+1的条件,因此,输出仍然为0。

C代码实现

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int countSegments(char* s) {
    int strle=strlen(s);
    if(strle==0)                                 //空字符串,长度为0;
        return 0;
    if(strle==1 &&s[0]!=32)                      //单个非空字符串
        return 1;
    printf("strlen=%d\n",strle);
    int i=1,j=0;
    while(s[i]!='\0')
    {    
        if((s[i-1]!=32&&s[i]==32 )||( s[i]!=32&&s[i+1]=='\0'))       //连续空格与最末尾段
            {
                j++;
            }
        i++;
    }
    return j;
}

int main()
{
    char* strs1=" ";                             //空格
    char* strs2="a";                             //单个非空字符串
    char* strs3="Hello, my name is John";        //正常字符串
    int segment1=0,segment2=0,segment3=0;
    
    segment1=countSegments(strs1);
    segment2=countSegments(strs2);
    segment3=countSegments(strs3);
    
    printf("segment1=%d\n",segment1);
    printf("segment2=%d\n",segment2);
    printf("segment3=%d\n",segment3);

    return 0;
}

参考文献
[1] https://leetcode.com/problems/number-of-segments-in-a-string/#/description
[2] http://www.cnblogs.com/grandyang/p/6137386.html

    原文作者:去留无意hmy
    原文地址: https://www.jianshu.com/p/215ba9236838
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞