表示数值的字符串

表示数值的字符串

http://www.nowcoder.com/questionTerminal/e69148f8528c4039ad89bb2546fd4ff8

#include <vector>
#include <unordered_set>
class Solution {
public:
    bool isNumeric(string str) {
// sign: 正负号 出现位置
// point:点 出现位置
// E:    e 出现位置
// num:  数字出现位置
         vector<int> sign,point,E;
//       为了方便查找,使用unordered_set
         unordered_set<int> num;
         int length = str.length();
         for(int i=0;i<length;i++)
         {
             if(str[i]=='+'||str[i]=='-') sign.push_back(i);
             else if(str[i]=='.') point.push_back(i); 
             else if(str[i]=='e'||str[i]=='E') E.push_back(i);
             else if(str[i]<='9'&&str[i]>='0') num.insert(i);
             else return false;
         }
//       正负号 不多于2个;点 不多于1个;e 不多于1个;数字 不少于1个;
        if(sign.size()>2||point.size()>1||E.size()>1||num.size()<1) return false;
//      当有两个+-时,必然一个在最前面,一个在e后面
//      当有一个+-时,必然在最前面,或在e后面
//      当有一个.时,.后必然有数字,.必在e前
//      当有一个e时,e前是数字,e后是数字或+-
        bool bRet = true;
        if(sign.size()==2) {
           bRet = bRet && (sign[0]==0 && E.size()==1 && sign[1]==E[0]+1);
        }
        if(sign.size()==1) {
           bRet = bRet && ( sign[0]==0 || (E.size()==1 && sign[0]==E[0]+1) );
        } 
        if(point.size()==1) {
           bRet = bRet && num.count(point[0]+1) && ( E.size()==0 || ( E.size()==1 && point[0]<E[0]) );
        }
        if(E.size()==1) {
           bRet = bRet && num.count(E[0]-1) && ( num.count(E[0]+1) || (sign.size()==1 && E[0]+1==sign[0]) || (sign.size()==2 && E[0]+1==sign[1]) );
        }  
        return bRet;
    }
};




































全部评论

相关推荐

11-30 11:07
河南大学 Java
宇宙厂 测开 n*15
丘丘给个offer:有后选后
点赞 评论 收藏
分享
无敌虾孝子:喜欢爸爸还是喜欢妈妈
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务