題目描述
統(tǒng)計(jì)字符串中的單詞個(gè)數(shù)师枣,這里的單詞指的是連續(xù)的不是空格的字符。
請(qǐng)注意,你可以假定字符串里不包括任何不可打印的字符株婴。
示例:
輸入: "Hello, my name is John"
輸出: 5
解題思路
首先理解好題意,知道什么一個(gè)單詞:對(duì)于一個(gè)一前一后都被空格所隔開(kāi)的就是單詞(第一個(gè)和最后一個(gè)可以看成自帶一個(gè)空格)暑认。這樣我們不必關(guān)心一個(gè)單詞里面有什么東西困介,我們只關(guān)心是不是先讀一個(gè)空格然后再讀一個(gè)空格,如果是就代表著一個(gè)空格蘸际。那如何可以快速找出判斷是不是有一前一后的兩個(gè)空格呢座哩,我們只需要設(shè)置一個(gè)標(biāo)致mark(bool型),mark為true就代表著已經(jīng)讀到了一個(gè)空格粮彤,mark為False就意味著沒(méi)有讀到空格根穷。我們只需要每次讀到一個(gè)不為空格的值再判斷mark是否為true(是否剛剛已經(jīng)讀了一個(gè)空格)如果都滿足我們就count加一,并且把空格置為false导坟,代表著這個(gè)單詞找完了屿良,需要找下一個(gè)單詞了,但是如果mark不為true就代表著先前沒(méi)有讀到空格惫周,這個(gè)空格是一個(gè)單詞前面那個(gè)尘惧,所以此時(shí)只需要把mark置為true即可,同時(shí)我們需要把mark置為true,為了讀第一個(gè)單詞的時(shí)候假定前面也有一個(gè)空格
代碼實(shí)現(xiàn)
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
class Solution {
public:
int countSegments(string s) {
int cnt = 0;
bool mark = true;
for (int i = 0; i < s.size(); i++) {
if (s[i] != ' ' && mark) {
cnt++;
mark = false;
} else if (s[i] == ' ') mark = true;
}
return cnt;
}
};