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

表示数值的字符串

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

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param str string字符串
     * @return bool布尔型
     */
    bool isNumeric(string str) {

        int index = 0;
        int point_num = 0;
        int num = 0;
        int e_num = 0;
        int E_num = 0;
        while (index < str.size()) {
            //判断有无符号
            //匹配符号
            if (str[index] == '+' || str[index] == '-') {
                if (index + 1 >= str.size() || !((str[index + 1] >= '0' && str[index + 1] <= '9') || str[index + 1] == '.') || (index - 1 >= 0 && str[index - 1] >= '0' && str[index - 1] <= '9')) {
                    return false;
                }
            }
            else if (str[index] == '.') {
                //匹配小数点
                point_num += 1;
                if (point_num > 1)return false;
                if ((index + 1 < str.size() && !(str[index + 1] >= '0' && str[index + 1] <= '9' || str[index + 1] == 'e' || str[index + 1] == 'E')) || (index - 1 >= 0 && !((str[index - 1] >= '0' && str[index - 1] <= '9') || str[index - 1] == '+' || str[index - 1] == '-'))) {
                    return false;
                }
            }
            else if (str[index] == 'e' || str[index] == 'E') {
                //匹配科学计数法
                if(str[index] == 'e')e_num += 1;
                if(str[index] == 'E')E_num += 1;
                if(e_num + E_num > 1)return false;
                if (index - 1 < 0 || !((str[index - 1] >= '0' && str[index - 1] <= '9') || str[index - 1] == '.') ||
                        index + 1 >= str.size() || !((str[index + 1] >= '0' && str[index + 1] <= '9') ||
                                                     (str[index + 1] == '+' || str[index + 1] == '-'))) {
                    return false;
                }
            }
            if(!(str[index] >= '0' && str[index] <= '9' || str[index] == '.' || str[index] == '+' || str[index] == '-' || str[index] == 'e' || str[index] == 'E' || str[index] == ' ')){
            return false;
        }
            if(str[index] >= '0' && str[index] <= '9')num += 1;
            index += 1;
        }

        if(e_num > 0 && point_num > 0 && ((strstr(str.c_str(),".") > strstr(str.c_str(),"e"))))return false;
        if(E_num > 0 && point_num > 0 && ((strstr(str.c_str(),".") > strstr(str.c_str(),"E"))))return false;
        if(num == 0)return false;
        return true;
    }
};

题解:根据规则一一匹配,时间复杂度是O(n),空间复杂度是O(1)。这样的解法我称之为shi山代码。

全部评论

相关推荐

lllllkin:感觉可以精简到一页简历,有些排版感觉不是必须的。 时间线越早的,你自己越熟悉的放前面。描述可以更精简些,一些问题解决感觉可以不用写具体技术栈,卖个关子,等面试官问。
点赞 评论 收藏
分享
嵐jlu:我是山川🐔里🐔🧱的,阿里系简历全过; 你这简历一看就还是半成品啊,没有荣誉经历奖项什么的吗?
投递阿里巴巴集团等公司10个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 12:04
毕业生招你惹你了,问一个发薪日来一句别看网上乱七八糟的你看哪个工作没有固定发薪日扭头就取消了面试就问了一句公司都是这个态度吗还搞上人身攻击了...
程序员小白条:呃呃呃,都还没面试,我都不会问这么细,何况通不通过,去不去都另说,你没实力和学历的话,在外面就这样,说实话没直接已读不回就不错了,浪费时间基本上
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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