zoukankan      html  css  js  c++  java
  • leetcode 65 Valid Number

    class Solution {
    public:
        bool isNumber(string s) {
            if(s.empty()) return true;
            unordered_set<char> chars,nums;
            for(int i=0;i<26;++i) {chars.insert('a'+i);chars.insert('A'+i);}
            chars.erase('e');
            for(int i=0;i<10;++i) nums.insert('0'+i);
            while(!s.empty()&&s[0]==' ') s.erase(s.begin());
            if(s.empty()) return false;
            while(s.back()==' ') s.pop_back();
            vector<int> vec;
            for(int i=0;i<s.size();++i) {
                char ch=s[i];
                if(chars.find(ch)!=chars.end()||ch==' ') return false;
                if(nums.find(ch)!=nums.end()) {
                    if(i!=0&&vec[i-1]==1) {s.erase(i,1);--i;}
                    else vec.push_back(1);
                    continue;
                }
                if(ch=='.'||ch=='e') {vec.push_back(-1);}
                if(ch=='+'||ch=='-') {
                    if(i!=0&&s[i-1]=='e') {s.erase(i,1);--i;}
                    else vec.push_back(-1);
                }
            }
            bool eflag=false;
            for(int i=0;i<s.size();++i) {
                if(vec[i]==1) continue;
                char ch=s[i];
                switch(ch) {
                    case '.':
                        if(i<s.size()-2&s[i+2]=='.') return false;
                        if(!i) {
                            if(i==s.size()-1) return false;
                            if(vec[i+1]<0) {return false;}
                            continue;
                        }
                        if(i==s.size()-1) {
                            if(vec[i-1]<0) return false;
                            continue;
                        }
                        if(vec[i-1]<0||vec[i+1]<0) {
                            if(s[i-1]=='+'||s[i-1]=='-'||s[i+1]=='e') continue;
                            return false;
                        }
                        break;
                    case 'e':
                        if(eflag) return false;
                        if(!i||i==s.size()-1) return false;
                        if(i<s.size()-2) {
                            if((s[i+1]=='+'||s[i+1]=='-')&&vec[i+2]) {++i;continue;}
                            if(vec[i+1]>0&&vec[i+2]<0) return false;
                        }
                        if(i==s.size()-2&&vec[i+1]<0) return false;
                        eflag=true;
                        break;
                    case '+':
                    case '-':
                        if(i!=0) return false;
                        if(i==s.size()-1) return false;
                        if(s[i+1]=='e') return false;
                }
            }
            return true;
        }
    };
  • 相关阅读:
    阿里云ecs服务器wamp内网可以访问,外网ip、域名无法访问
    python- 粘包 struct,socketserver
    python-网络编程
    python-模块-包
    python- 异常
    python-模块 time, os, sys
    python_模块 collections,random
    python_模块 hashlib ,configparser, logging
    python_ 模块 json pickle shelve
    python-面向对象中的特殊方法 ,反射,与单例模式
  • 原文地址:https://www.cnblogs.com/LiuQiujie/p/12696689.html
Copyright © 2011-2022 走看看