是不是这么写自动机的转移状态态麻烦了 啊,看看官方的代码吧
class Solution(object):
def isNumber(self, s):
"""
:type s: str
:rtype: bool
DFA啊
"""
dict_state={
0:[['1','2','3','4','5','6','7','8','9','0','+','-','.'],[1,1,1,1,1,1,1,1,1,1,2,2,3],True],#开始前状态
1:[['1','2','3','4','5','6','7','8','9','0','e','E','.'],[1,1,1,1,1,1,1,1,1,1,4,4,7],True],#未接受.的数字自旋
2:[['1','2','3','4','5','6','7','8','9','0','.'],[1,1,1,1,1,1,1,1,1,1,8],False],#±
3:[['1','2','3','4','5','6','7','8','9','0'],[7,7,7,7,7,7,7,7,7,7],False],#.
4:[['1','2','3','4','5','6','7','8','9','0','+','-'],[5,5,5,5,5,5,5,5,5,5,6,6],False],#e
5:[['1','2','3','4','5','6','7','8','9','0'],[5,5,5,5,5,5,5,5,5,5],True],#e后数字自旋
6:[['1','2','3','4','5','6','7','8','9','0'],[5,5,5,5,5,5,5,5,5,5],False],#e后±
7:[['1','2','3','4','5','6','7','8','9','0','e','E'],[7,7,7,7,7,7,7,7,7,7,4,4],True],#数字之后的第一个.
8:[['1','2','3','4','5','6','7','8','9','0','e','E'],[7,7,7,7,7,7,7,7,7,7,4,4],False]#±后边的第一个.
}
cur_state=0
for cur_char in s:
if cur_char in dict_state[cur_state][0]:
idx=dict_state[cur_state][0].index(cur_char)
cur_state=dict_state[cur_state][1][idx]
else:
return False
if dict_state[cur_state][-1]:
return True
else:
return False