有穷自动机

来自: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;
}

原来这就是有穷自动机啊~

猜你喜欢

转载自www.cnblogs.com/zhying99/p/10686377.html