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)\)
  • 相关阅读:
    linux 如何显示一个文件的某几行(中间几行)
    Cookie——Javascript
    CSS——4种定位
    Javascript——DOM
    javascript之八——BOM
    Javascript——闭包、作用域链
    Struct2
    javaweb——Servlet作为控制器
    排序算法——快排思想
    java——获取从控制台输入的数据的方法
  • 原文地址:https://www.cnblogs.com/wdt1/p/13604871.html
Copyright © 2011-2022 走看看