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

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。

数值(按顺序)可以分成以下几个部分:

若干空格
一个 小数 或者 整数
(可选)一个 'e' 或 'E' ,后面跟着一个 整数
若干空格
小数(按顺序)可以分成以下几个部分:

(可选)一个符号字符('+' 或 '-')
下述格式之一:
至少一位数字,后面跟着一个点 '.'
至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
一个点 '.' ,后面跟着至少一位数字
整数(按顺序)可以分成以下几个部分:

(可选)一个符号字符('+' 或 '-')
至少一位数字
部分数值列举如下:

["+100", "5e2", "-123", "3.1416", "-1E-16", "0123"]
部分非数值列举如下:

["12e", "1a3.14", "1.2.3", "+-5", "12e+5.4"]
 

示例 1:

输入:s = "0"
输出:true
示例 2:

输入:s = "e"
输出:false
示例 3:

输入:s = "."
输出:false
示例 4:

输入:s = "    .1  "
输出:true
 

提示:

1 <= s.length <= 20
s 仅含英文字母(大写和小写),数字(0-9),加号 '+' ,减号 '-' ,空格 ' ' 或者点 '.' 。

 

个人思路: 首先判断一个字符串是否为数值?首先考虑的是怎么判断,打算用正则表达式。但是题目的解析打算使用有限状态机,虽然本科阶段学过,但是许久没用也忘的差不多了,因此来回顾有限状态自动机。

 

利用有限自动机进行字符串匹配

这些字符串匹配的自动机都非常有效:它们只对每个文本字符检查一次,而且检查每个文本字符所用的时间为O(n)。

 

 

顾名思义:有限状态自动机是有限个可能的状态,每个状态可以进行迁移到零个或者多个状态。输入字串决定哪个状态的迁移。有限状态自动机可以表示为一个有向图。

定义:有限状态自动机是一个五元组

– Q——状态的非空有穷集合。∀q∈Q,q称为M的一个状态。
– Σ——输入字母表。
– δ——状态转移函数,有时又叫作状态转换函数或者移动函数,δ:Q×Σ→Q,δ(q,a)=p。
– q0——M的开始状态,也可叫作初始状态或启动状态。q0∈Q。
– F——M的终止状态集合。F被Q包含。任给q∈F,q称为M的终止状态。
 
 

 

posted @ 2021-11-05 21:00  夏天·烟火·我的尸体  阅读(36)  评论(0)    收藏  举报