来自:https://89396.blog.luogu.org/solution-p1308#
简单例子:
输入一个字符串,输入的只有两种字符,一种是字母,一种是空格。现在求一共有几个单词。注意,有可能有多个空格连在一起,开头和结尾都有可能有空格。
解法:
初始化第一个字符,当为空格时flag记为0,为字母时flag记为1,然后遍历剩下的字符。
#include <stdio.h> #include <string.h> #include <iostream> #include <math.h> #include <stack> #include <queue> #include <vector> #include <algorithm> using namespace std; int main(){ string s; int flag,ans=0; getline(cin,s); if(s[0]==' ') //设初值 flag=0; else flag=1; for(int i=1;i<s.length();i++){ //从1开始遍历 if(s[i]==' '){ if(flag==1){ //找到一个单词计数并将状态改变 ans++; flag=0; } } else{ if(flag==0){ //改变状态 flag=1; } } } if(flag==1){ //最后还要判断一下千万不要忘记 ans++; } printf("%d",ans); return 0; }
原来这就是有穷自动机啊~