zoukankan      html  css  js  c++  java
  • 「Leetcode」字符串相关问题选编

    剑指 Offer 20. 表示数值的字符串

    这题介绍一个使用有限自动机的做法,实际上细心的考虑corner case的效率比这个方法更好,但是这个方法比较具有代表性。
    画出如下的示意图:

    然后照着这个示意图做就可以了。
    注意,这么几种样例都是合法的:

    -1.e-12
    +.1
    +1.
    -.52E+3
    114.514e123
    

    接下来见代码:

    from enum import Enum
    class Solution:
        def isNumber(self, s: str) -> bool:
            State = Enum('State', (
                'START', 'SYM_START_DECIMAL_PNT', 'SYM_MID_DECIMAL_PNT', 'NUM_SIMPLE',
                'NUM_FIRST_PART', 'NUM_SECOND_PART', 'SYM_SCI', 'NUM_AFT_SCI', 
                'SYM_PN_SIMPLE', 'SYM_PN_SCI', 'ERROR'))
            end_state = (
                State.NUM_SIMPLE, State.SYM_MID_DECIMAL_PNT, State.NUM_FIRST_PART, 
                State.NUM_SECOND_PART, State.NUM_AFT_SCI)
    
            now_state = State.START
            s = s.strip()
            s_iter = iter(s)
            while True:
                if now_state == State.ERROR:
                    return False
                
                try:
                    now_chr = next(s_iter)
                except StopIteration:
                    if now_state in end_state:
                        return True
                    else:
                        return False
                
                if now_state == State.START:
                    if now_chr.isnumeric():
                        now_state = State.NUM_FIRST_PART
                        continue
                    elif now_chr in ['+', '-']:
                        now_state = State.SYM_PN_SIMPLE
                        continue
                    elif now_chr == ".":
                        now_state = State.SYM_START_DECIMAL_PNT
                        continue
                elif now_state == State.NUM_FIRST_PART:
                    if now_chr.isnumeric():
                        continue
                    elif now_chr == ".":
                        now_state = State.SYM_MID_DECIMAL_PNT
                        continue
                    elif now_chr in ["e", "E"]:
                        now_state = State.SYM_SCI
                        continue
                elif now_state == State.SYM_START_DECIMAL_PNT:
                    if now_chr.isnumeric():
                        now_state = State.NUM_SIMPLE
                        continue
                elif now_state == State.SYM_MID_DECIMAL_PNT:
                    if now_chr.isnumeric():
                        now_state = State.NUM_SECOND_PART
                        continue
                    elif now_chr in ["e", "E"]:
                        now_state = State.SYM_SCI
                        continue
                elif now_state == State.NUM_SIMPLE:
                    if now_chr in ["e", "E"]:
                        now_state = State.SYM_SCI
                        continue
                    elif now_chr.isnumeric():
                        continue
                elif now_state == State.NUM_SECOND_PART:
                    if now_chr.isnumeric():
                        continue
                    elif now_chr in ["e", "E"]:
                        now_state = State.SYM_SCI
                        continue
                elif now_state == State.SYM_SCI:
                    if now_chr.isnumeric():
                        now_state = State.NUM_AFT_SCI
                        continue
                    elif now_chr in ["+", "-"]:
                        now_state = State.SYM_PN_SCI
                        continue
                elif now_state == State.NUM_AFT_SCI:
                    if now_chr.isnumeric():
                        continue
                elif now_state == State.SYM_PN_SIMPLE:
                    if now_chr == ".":
                        now_state = State.SYM_START_DECIMAL_PNT
                        continue
                    elif now_chr.isnumeric():
                        now_state = State.NUM_FIRST_PART
                        continue
                elif now_state == State.SYM_PN_SCI:
                    if now_chr.isnumeric():
                        now_state = State.NUM_AFT_SCI
                        continue
                now_state = State.ERROR
    
  • 相关阅读:
    PHP 批量删除 基本思路
    spark yarn 集群提交kafka代码
    scala高阶函数类型推断什么时候失效?
    一文读懂 超简单的spark structured stream 源码解读
    一文读懂spark yarn集群搭建
    linux平台 spark standalone集群 使用 start-all,stop-all 管理集群的启动和退出
    linux平台使用spark-submit以cluster模式提交spark应用到standalone集群
    windows平台使用spark-submit以client方式提交spark应用到standalone集群
    spark使用idea以client模式提交应用到standalone集群
    spark standalone集群部署 实践记录
  • 原文地址:https://www.cnblogs.com/samhx/p/leetcode-string.html
Copyright © 2011-2022 走看看