以e或E分成两部分分别判断即可。
int maxl(int a,int b) { if(a>b) return a; return b; } class Solution { public: bool isNumeric(string str) { int lable=0,pos=maxl(str.find("e",0),str.find("E",0)); string up="",down=""; if(pos==-1) up=str; else { up=str.substr(0,pos); down=str.substr(pos+1,str.size()-pos); if(down=="") return false; } for(int i=0;i<up.size();i++) { if((up[i]=='+'||up[i]=='-')&&i==0) continue; if((up[i]=='+'||up[i]=='-')&&i!=0) return false; if(up[i]=='.') { if(lable==1) return false; lable=1; if(up[i+1]>='0'&&up[i+1]<='9') continue; else return false; } if(up[i]<'0'||up[i]>'9') return false; } for(int i=0;i<down.size();i++) { if((down[i]=='+'||down[i]=='-')&&i==0) continue; if((down[i]=='+'||down[i]=='-')&&i!=0) return false; if(down[i]=='.') return false; if(down[i]<'0'||down[i]>'9') return false; } return true; } };
一个维护当前首次出现的字符顺序表,一个维护出现的字符数目表
class Solution { public: string donser; void Insert(char ch) donser=donser.insert(donser.size(),1,ch); char FirstAppearingOnce() { char first=donser[0]; vector<char>vec; vector<char>::iterator it; map<char,int>mp; for(int i=0;i<donser.size();i++) { it=find(vec.begin(),vec.end(),donser[i]); if(it==vec.end()&&mp[donser[i]]==0) vec.push_back(donser[i]); else if(it!=vec.end()&&mp[donser[i]]!=0) vec.erase(it); mp[donser[i]]++; } if(vec.size()==0) return '#'; return *(vec.begin()); } };