'''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
DFA(有限自动机)的实例用法,判断字符串是否是十进制
猜你喜欢
转载自blog.csdn.net/qq_41716239/article/details/104187298
今日推荐
周排行