zoukankan      html  css  js  c++  java
  • 剑指Offer——表示数值的字符串

    题目描述:

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


    分析:

     其实这道题真正想锻炼的是自动机的构建或者是正则的表示吧。

    利用编译原理中的知识。

    1. 确定正则表达式,然后由正则表达式构造等价的NFA M(非确定有限自动机),
    2. 再将NFA M确定化,构造出一个与之等价的DFA M(确定有限自动机),
    3. 最后将DFA M化简。就可以得到一个表示数值的自动机模式。

    之后我们可以利用模式编写代码,只要沿着初态一直走到某个终态,就可以说带字符串能表示数值了。

    不过题目没给清楚还有很多种情况没有说明是否是数值,比如“.2”,“2.”等等。

    所以为了避免重构自动机,最后我还是用了正则匹配,毕竟正则写起来比较简单,修改容易。


    代码:

     Java代码(利用正则表达式匹配):

    1 public class Solution {
    2     public boolean isNumeric(char[] str) {
    3         String s = String.valueOf(str);
    4         return s.matches("[+-]?[0-9]*(\.[0-9]*)?([eE][+-]?[0-9]+)?");
    5     }
    6 }
  • 相关阅读:
    980不同路径III
    输入函数
    IDEA更新maven依赖包
    join()函数
    方差偏差困境
    np.bincount()函数
    72编辑距离
    741摘樱桃
    523连续的子数组和
    1306跳跃游戏III
  • 原文地址:https://www.cnblogs.com/jacen789/p/7747776.html
Copyright © 2011-2022 走看看