题解 | #表示数值的字符串#
表示数值的字符串
https://www.nowcoder.com/practice/e69148f8528c4039ad89bb2546fd4ff8
画dfa解的,比正则块一毫秒😁
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @return bool布尔型
*/
bool isNumeric(string str) {
if (str.empty())return false;
int state = 0;
for (int i = 0; i < str.size(); i++) {
switch (state) {
case 0:
if (str[i] == '+' || str[i] == '-') {
state = 1;
break;
} else if (str[i] == ' ') {
break;
} else if (str[i] == '.') {
state = 9;
break;
} else if (isdigit(str[i])) {
state = 2;
break;
} else return false;
case 1:
if (isdigit(str[i])) {
state = 2;
break;
} else if (str[i] == '.') {
state = 9;
break;
} else return false;
case 2:
if (isdigit(str[i])) {
state = 2;
break;
}else if (str[i] == ' ') {
state = 8;
break;
} else if (str[i] == 'e' || str[i] == 'E') {
state = 5;
break;
} else if (str[i] == '.') {
state = 3;
break;
} else return false;
case 3:
if (isdigit(str[i])) {
state = 4;
break;
}else if (str[i] == 'e' || str[i] == 'E') {
state = 5;
break;
} else return false;
case 4:
if (isdigit(str[i])) {
break;
} else if (str[i] == 'e' || str[i] == 'E') {
state = 5;
break;
} else return false;
case 5:
if (isdigit(str[i])) {
state = 7;
break;
} else if (str[i] == '+' || str[i] == '-') {
state = 6;
break;
} else return false;
case 6:
if (isdigit(str[i])) {
state = 7;
break;
} else return false;
case 7:
if (isdigit(str[i])) {
break;
} else if (str[i] == ' ') {
state = 8;
break;
} else return false;
case 8:
if (str[i] == ' ') {
break;
} else return false;
case 9:
if (isdigit(str[i])) {
state = 4;
break;
} else return false;
}
}
// write code here
return state == 2 || state == 4 || state == 7 || state == 8 || state == 3;
}
};
