zoukankan      html  css  js  c++  java
  • 【模拟】B000_LCjz_表示数值的字符串(模拟+分类讨论)

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

    方法一:模拟

    ...

    class Solution {
    public:
        bool isSign(char c) { return c=='+'||c=='-'; }
        bool is_e_or_E(char c) { return c=='e'||c=='E'; }
        bool isNumber(string s) {
            int n=s.size(), i=0;
            while (i<n && s[i]==' ') i++;
            if (s=="") return false;
            bool hasDig=false, hasSign=false, has_e_or_E=false, hasDot=false; 
    
            while (i<n) {
                char c=s[i];
                if (isdigit(c)) {
                    hasDig=1;
                }else if (isSign(c)) {
                    if (hasSign || hasDig || hasDot) return false;
                    hasSign=1;
                }else if (is_e_or_E(c)) {
                    if (has_e_or_E || !hasDig) return false;
                    has_e_or_E=1, hasDig=hasSign=hasDot=0;  //e/E后面可以跟+/-,而此时+/-号前面如果出现了数字,则需要清除标记,否则会上面的if会误判+/-号前有数字
                }else if (c=='.'){
                    if (hasDot || has_e_or_E) return false;
                    hasDot=1;
                }else if (c==' ') {
                    break;
                }else {
                    return false;
                }
                i++;
            }
            while (i<n && s[i]==' ') i++;
            return hasDig && i==n;
        }
    };  
    

    复杂度分析

    • Time\(O(n)\)
    • Space\(O(1)\)
  • 相关阅读:
    理财技术+人生感悟(转)
    程序员每天每月每年需要做的事(转)
    数据库常用函数(数字函数)
    数据库之常用函数 (日期函数)
    Qt初级-头文件
    Qt初级-成员函数(二)
    Qt初级-成员函数(一)
    Qt初级-Qt格式(二)
    Qt初级-Qt格式(一)
    Qt初级-Qt继承表
  • 原文地址:https://www.cnblogs.com/wdt1/p/13604871.html
Copyright © 2011-2022 走看看