专栏首页CtrlCV博客【剑指Offer】表示数值的字符串

【剑指Offer】表示数值的字符串

题目

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

题解

class Solution {
    public boolean isNumber(String s) {
        Map[] states = {
            new HashMap<>() {{ put(' ', 0); put('s', 1); put('d', 2); put('.', 4); }}, // 0.
            new HashMap<>() {{ put('d', 2); put('.', 4); }},                           // 1.
            new HashMap<>() {{ put('d', 2); put('.', 3); put('e', 5); put(' ', 8); }}, // 2.
            new HashMap<>() {{ put('d', 3); put('e', 5); put(' ', 8); }},              // 3.
            new HashMap<>() {{ put('d', 3); }},                                        // 4.
            new HashMap<>() {{ put('s', 6); put('d', 7); }},                           // 5.
            new HashMap<>() {{ put('d', 7); }},                                        // 6.
            new HashMap<>() {{ put('d', 7); put(' ', 8); }},                           // 7.
            new HashMap<>() {{ put(' ', 8); }}                                         // 8.
        };
        int p = 0;
        char t;
        for(char c : s.toCharArray()) {
            if(c >= '0' && c <= '9') t = 'd';
            else if(c == '+' || c == '-') t = 's';
            else if(c == '.' || c == 'e' || c == 'E' || c == ' ') t = c;
            else t = '?';
            if(!states[p].containsKey(t)) return false;
            p = (int)states[p].get(t);
        }
        return p == 2 || p == 3 || p == 7 || p == 8;
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【剑指Offer】包含min函数的栈

    定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。

    小新哟
  • 【剑指Offer】Ⅲ. 从上到下打印二叉树

    请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。

    小新哟
  • 【剑指Offer】Ⅱ. 从上到下打印二叉树

    / 9 20 / 15 7 返回其层次遍历结果:

    小新哟
  • Java - LinkedBlockingQueue的阻塞实现

    LinkedBlockingQueue是BlockingQueue的链表实现,他的阻塞体现在put和take方法上,下面将通过源码介绍如何LinkedBlock...

    夹胡碰
  • 专访韦乐平:SDN已到转折点,规模化应用需良方

    SDNLAB
  • 蓝桥杯之奇怪的比赛

    题目 奇怪的比赛 某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数...

    小二哥
  • 布隆过滤器过时了,未来属于布谷鸟过滤器?

    为了解决布隆过滤器不能删除元素的问题,布谷鸟过滤器横空出世。论文《Cuckoo Filter:Better Than Bloom》作者将布谷鸟过滤器和布隆过滤器...

    老钱
  • 【NLP】用于序列标注问题的条件随机场(Conditional Random Field, CRF)

    上一篇介绍了隐马尔科夫模型,隐马尔科夫模型引入了马尔科夫假设,即当前时刻的状态只与其前一时刻的状态有关。但是,在序列标注任务中,当前时刻的状态,应该同该时刻的前...

    用户1508658
  • 思为科技彭双全:我们正处于房地产数字化转型的核心战场|腾讯SaaS加速器·CEO说

    ? 来源 | 腾讯SaaS加速器首期项目-思为科技 ---- “现在大家都在讨论,新基建对中国房地产到底是利好还是利空。其实我觉得思路不是这样二元对立的。”近...

    腾讯SaaS加速器
  • 7个Python实战项目代码,让你分分钟晋级大神!

    1、你不知道已经有哪些轮子已经造好了,哪个适合你用。有名有姓的的著名轮子就400多个,更别说没名没姓自己在制造中的轮子。

    用户4962466

扫码关注云+社区

领取腾讯云代金券