题解 | #表示数值的字符串#

表示数值的字符串

https://www.nowcoder.com/practice/e69148f8528c4039ad89bb2546fd4ff8

画dfa解的,比正则块一毫秒😁

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param str string字符串
     * @return bool布尔型
     */
    bool isNumeric(string str) {
        if (str.empty())return false;
        int state = 0;
        for (int i = 0; i < str.size(); i++) {
            switch (state) {
                case 0:
                    if (str[i] == '+' || str[i] == '-') {
                        state = 1;
                        break;
                    } else if (str[i] == ' ') {
                        break;
                    } else if (str[i] == '.') {
                        state = 9;
                        break;
                    } else if (isdigit(str[i])) {
                        state = 2;
                        break;
                    } else return false;
                case 1:
                    if (isdigit(str[i])) {
                        state = 2;
                        break;
                    } else if (str[i] == '.') {
                        state = 9;
                        break;
                    } else return false;
                case 2:
                    if (isdigit(str[i])) {
                        state = 2;
                        break;
                    }else if (str[i] == ' ') {
                        state = 8;
                        break;
                    } else if (str[i] == 'e' || str[i] == 'E') {
                        state = 5;
                        break;
                    } else if (str[i] == '.') {
                        state = 3;
                        break;
                    } else return false;
                case 3:
                    if (isdigit(str[i])) {
                        state = 4;
                        break;
                    }else if (str[i] == 'e' || str[i] == 'E') {
                        state = 5;
                        break;
                    } else return false;
                case 4:
                    if (isdigit(str[i])) {
                        break;
                    } else if (str[i] == 'e' || str[i] == 'E') {
                        state = 5;
                        break;
                    } else return false;
                case 5:
                    if (isdigit(str[i])) {
                        state = 7;
                        break;
                    } else if (str[i] == '+' || str[i] == '-') {
                        state = 6;
                        break;
                    } else return false;
                case 6:
                    if (isdigit(str[i])) {
                        state = 7;
                        break;
                    } else return false;
                case 7:
                    if (isdigit(str[i])) {
                        break;
                    } else if (str[i] == ' ') {
                        state = 8;
                        break;
                    } else return false;
                case 8:
                    if (str[i] == ' ') {
                        break;
                    } else return false;
                case 9:
                    if (isdigit(str[i])) {
                        state = 4;
                        break;
                    } else return false;
            }
        }
        // write code here
        return state == 2 || state == 4 || state == 7 || state == 8 || state == 3;
    }
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-04 14:23
steelhead:你回的有问题,让人感觉你就是来学习的
点赞 评论 收藏
分享
练习生懒羊羊:开飞机把这个公司创飞吧
点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务