剑指offer2之表示数值的字符串

前言

假如给定一个字符串,如何判断它是数值?即该字符串对应的数必须是整数或者小数。当然,还要考虑科学计数法的加入。所以我们需要知道字符串遵循的模式,即 A[.[B]][e|EC] 或者 .B[e|EC]。其中 A 为数值的整数部分,B 紧跟着小数点为数值的小数部分,C表示指数部分。

题目(表示数值的字符串)

题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。

算法描述

在前言提到的字符串是数值时,它所遵循的模式中,A 和 C 是含’+-‘以及’0-9’的字符串,B是仅含 ‘0-9’的字符串。
那么我们就需要根据 ‘.’和 ‘e|E’ 的位置判别接下来的字符串所满足的条件。具体分析见代码。

另外,我们还可以根据字符串遵循的模式利用正则匹配表示式来匹配。正则表达式为 [+-]\?[0-9](.[0-9])\?([eE][+-]?[0-9]*)\?

算法实现

复杂度分析

需要扫描一遍字符串时间复杂度为 O(n),空间复杂度为 O(1)。

参考

<<剑指offer2>>

-------------本文结束感谢您的阅读-------------