题解 | #表示数值的字符串#
表示数值的字符串
https://www.nowcoder.com/practice/e69148f8528c4039ad89bb2546fd4ff8
直接通过规则判断即可,一层循环,时间复杂度为O(n)。
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @return bool布尔型 */ bool isNumeric(string str) { // write code here int idx; for(idx=0;idx<str.length();idx++){ if(str[idx]==' ') continue; else break; } int e_counter = 0; int dot_counter = 0; int dot_pos = -1; int e_pos = -1; int sign_counter = 0; bool start_blank = false; int first_num_pos = -1; int last_num_pos = -1; bool meet_num = false; for(int i=idx;i<str.length();i++){ if(str[i]==' '&&!start_blank) start_blank = true; if(start_blank&&str[i]!=' ') return false; if((str[i]>='A'&&str[i]<='Z')||str[i]>='a'&&str[i]<='z'){ if(str[i]=='e'||str[i]=='E'){ e_counter++; e_pos = i; if(e_counter>1) return false; } else { return false; } } if(str[i]=='+'||str[i]=='-'){ if(i-1>=0){ if(str[i-1]==' '||str[i-1]=='e'||str[i-1]=='E'){ sign_counter++; if(sign_counter>2) return false; continue; } else { return false; } } else{ sign_counter++; if(sign_counter>2) return false; } } if(str[i]=='.'){ if((i-1>=0&&str[i-1]>='0'&&str[i-1]<='9')||(i+1<str.length()&&str[i+1]>='0'&&str[i+1]<='9')){ dot_counter++; dot_pos=i; if(dot_counter>1) return false; continue; } else { return false; } } if(str[i]>='0'&&str[i]<='9'){ if(meet_num){ last_num_pos = i; } else { first_num_pos = i; last_num_pos = i; meet_num = true; } } } if(!meet_num) return false; if(e_pos!=-1&&e_pos>last_num_pos) return false; if(e_pos!=-1&&dot_pos!=-1&&dot_pos> e_pos) return false; if(e_pos!=-1&&first_num_pos>e_pos) return false; return true; } };