DFA(有限自动机)的实例用法,判断字符串是否是十进制

在这里插入图片描述


'''DFA(有限自动机)'''
def isNumber(self, s: str) -> bool:
    state = [
        {
    
    },
        # 状态1,初始状态(扫描通过的空格)
        {
    
    "blank": 1, "sign": 2, "digit": 3, ".": 4},
        # 状态2,发现符号位(后面跟数字或者小数点)
        {
    
    "digit": 3, ".": 4},
        # 状态3,数字(一直循环到非数字)
        {
    
    "digit": 3, ".": 5, "e": 6, "blank": 9},
        # 状态4,小数点(后面只有紧接数字)
        {
    
    "digit": 5},
        # 状态5,小数点之后(后面只能为数字,e,或者以空格结束)
        {
    
    "digit": 5, "e": 6, "blank": 9},
        # 状态6,发现e(后面只能符号位, 和数字)
        {
    
    "sign": 7, "digit": 8},
        # 状态7,e之后(只能为数字)
        {
    
    "digit": 8},
        # 状态8,e之后的数字后面(只能为数字或者以空格结束)
        {
    
    "digit": 8, "blank": 9},
        # 状态9, 终止状态 (如果发现非空,就失败)
        {
    
    "blank": 9}
    ]
    cur_state = 1
    for c in s:
        if c.isdigit():
            c = "digit"
        elif c in " ":
            c = "blank"
        elif c in "+-":
            c = "sign"
        if c not in state[cur_state]:
            return False
        cur_state = state[cur_state][c]
    if cur_state not in [3, 5, 8, 9]:
        return False
    return True

猜你喜欢

转载自blog.csdn.net/qq_41716239/article/details/104187298
今日推荐