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;
        }
    };
  • 相关阅读:
    dns解析后ping的居然不是自己的ip
    Ubuntu修改默认使用的bash
    安装 libbpg
    libnccl安装
    安装opencv
    tcpdump使用
    jQuery类操作
    jQuery对象和DOM对象的相互转换
    jQuery入口函数
    什么是外边距重叠?重叠的结果是什么?
  • 原文地址:https://www.cnblogs.com/LiuQiujie/p/12696689.html
Copyright © 2011-2022 走看看