剑指 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)。
顾名思义:有限状态自动机是有限个可能的状态,每个状态可以进行迁移到零个或者多个状态。输入字串决定哪个状态的迁移。有限状态自动机可以表示为一个有向图。
定义:有限状态自动机是一个五元组

浙公网安备 33010602011771号