表示数值的字符串

表示数值的字符串

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;
    }
};




































全部评论

相关推荐

09-25 00:00
已编辑
电子科技大学 Java
球球与墩墩:这不是前端常考的对象扁平化吗,面试官像是前端出来的 const flattern = (obj) => { const res = {}; const dfs = (curr, path) => { if(typeof curr === 'object' && curr !== null) { const isArray = Array.isArray(curr); for(let key in curr) { const newPath = path ? isArray ? `${path}[${key}]` : `${path}.${key}` : key; dfs(curr[key], newPath); } } else { res[path] = curr } } dfs(obj); return res; }
查看3道真题和解析
点赞 评论 收藏
分享
10-22 12:03
山东大学 Java
程序员小白条:26届一般都得有实习,项目可以随便写的,如果不是开源社区的项目,随便包装,技术栈也是一样,所以本质应该找学历厂,多投投央国企和银行,技术要求稍微低一点的,或者国企控股那种,纯互联网一般都得要干活
应届生简历当中,HR最关...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务