利用数字,正负号,点,大小e之间的互斥关系,简化状态机,进行求解,学到了!
class Solution {
public:
bool isNumber(string s) {
if(s.size() == 0) return false;
int left = 0, right = s.length() - 1;
while(left <= right && s[left] == ' '){
left++;
}
if(left > right) return false;
while(left < right && s[right] == ' '){
right--;
}
bool isNum = false;
bool isDot = false;
bool isEe = false;
bool isSign = false;
for(int i = left; i <= right; i++){
if(s[i] >= '0' && s[i] <= '9'){
isNum = true;
}
else if(s[i] == '.' && !isDot && !isEe){
isDot = true;
}
else if((s[i] == 'E' || s[i] == 'e') && isNum && !isEe){
isEe = true;
isNum = false;
}
else if((s[i] == '+' || s[i] == '-') && (i == left || s[i - 1] == 'E' || s[i - 1] == 'e')){
isSign = true;
}
else{
return false;
}
}
return isNum;
}
};