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 }
  • 相关阅读:
    老杳:2017年中国集成电路产业十大新闻
    RMA退货流程解决方案
    Linux
    vue.js
    NET Core度身定制的AOP框架
    Timeline
    HTTP
    MVC 常用扩展点:过滤器、模型绑定等
    装箱拆箱
    jQuery Tree
  • 原文地址:https://www.cnblogs.com/jacen789/p/7747776.html
Copyright © 2011-2022 走看看