LeetCode题解(Offer20):识别表示数值的字符串(支持正负号、E)(Python)
发布日期:2021-06-29 19:58:55
浏览次数:2
分类:技术文章
本文共 1921 字,大约阅读时间需要 6 分钟。
题目:(中等)
标签:字符串、正则表达式、自动机、自动机-有限状态自动机
解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
---|---|---|---|
Ans 1 (Python) | – | – | 44ms (77.81%) |
Ans 2 (Python) | – | – | 48ms (55.80%) |
Ans 3 (Python) | O ( N ) O(N) O(N) | O ( N ) O(N) O(N) | 60ms (9.84%) |
解法一(正则表达式):
class Solution: def isNumber(self, s: str) -> bool: return re.match(r"^ *[-+]?(\d+\.?\d*|\.\d+)([Ee][-+]?\d+|) *$", s) is not None
解法二(捣蛋取巧法):
def isNumber(self, s: str) -> bool: try: float(s) return True except: return False
解法三(有效状态自动机):
class Automaton: def __init__(self): self.stat = 0 self.table = { -1: [-1, -1, -1, -1, -1], # 已确定无效的状态 0: [0, 1, 3, 2, -1], # 初始状态,尚无符号、小数点和有效数字 1: [-1, -1, 3, 2, -1], # 已有符号,尚无小数点、有效数字 2: [-1, -1, 4, -1, -1], # 已有符号、小数点,尚无有效数字 3: [8, -1, 3, 4, 5], # 已有符号、有效数字,尚无小数部分 4: [8, -1, 4, -1, 5], # 已有符号、有效数字和小数部分 5: [-1, 6, 7, -1, -1], # 已有e,尚无e后的符号和有效数字 6: [-1, -1, 7, -1, -1], # 已有e和e后的符号,尚无e后的有效数字 7: [8, -1, 7, -1, -1], # 已有e和e后的符号、有效数字 8: [8, -1, -1, -1, -1], # 已结束匹配数字部分 } self.final = [False, False, False, False, True, True, False, False, True, True] # [-1,8] def get(self, ch: str): # 计算当前状态 if ch.isspace(): self.stat = self.table[self.stat][0] elif ch == "+" or ch == "-": self.stat = self.table[self.stat][1] elif ch.isdigit(): self.stat = self.table[self.stat][2] elif ch == ".": self.stat = self.table[self.stat][3] elif ch == "e" or ch == "E": self.stat = self.table[self.stat][4] else: self.stat = -1 def end(self): return self.final[self.stat + 1]class Solution: def isNumber(self, s: str) -> bool: automaton = Automaton() for ch in s: automaton.get(ch) # print(s, ":", automaton.stat) return automaton.end()
转载地址:https://dataartist.blog.csdn.net/article/details/108372088 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月11日 03时03分00秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【使用技巧】Pycharm需要配置脚本路径(Script Path)
2019-04-30
【语句总结】Python的三种列表拷贝方式
2019-04-30
【使用技巧】青铜级网络防钓鱼指南
2019-04-30
Java的安装和环境配置
2019-04-30
IDEA的下载和配置
2019-04-30
【概念理解】typedef-Lnode-*Linklist
2019-04-30
【概念理解】gluOrtho2D和glViewport的作用&窗口与显示的关系
2019-04-30
【语句总结】OpenGL的一些语句
2019-04-30
【算法记录】在内循环作出优化的冒泡排序
2019-04-30
【算法记录】梅式砝码问题
2019-04-30
【算法记录】斐波那契数列的余求解
2019-04-30
【语句总结】java中改变数字精确度
2019-04-30
【语句总结】java中数值的精确计算,大型小数:BigDecimal
2019-04-30
【概念理解】Java中parseXXX和valueOf,toString的区别
2019-04-30
【语句总结】回文序列各项之和问题中发现的java特性
2019-04-30
【语句总结】获取字符串的某个单独字符:charAt()方法
2019-04-30
【算法记录】联通体的并查集
2019-04-30
【算法记录】快速幂
2019-04-30
【语句总结】大数操作:BigInteger
2019-04-30
【从零实现一个H.264码流解析器】(二):导入指数哥伦布解码实现并初步解析NALU
2019-04-30