class Solution {
public:
bool isNumber(string s) {
bool flag1 = false;
bool flag2 = false;
int len = s.length();
int st = 0;
int ed = len - 1;
while(s[ed] == ' ' && ed > 0) ed--;
while(s[st] == ' ' && st < len) st++;
if(s[st] == '-'|| s[st] == '+') st++;
if(st > ed) return false;
int i = st;
while(i <= ed){
if(s[i] == '.'){
if(flag1 || flag2) return false;
flag1 = true;
if(i == ed && i == st) return false;
if(i == st && !isdigit(s[i + 1])) return false;
if(i == ed && !isdigit(s[i - 1])) return false;
}else if(s[i] == 'e'){
if(flag2) return false;
if(i == st || i == ed) return false;
flag2 = true;
if(s[i + 1] == '+' || s[i + 1] == '-'){
i++;
if(i == ed || !isdigit(s[i + 1])) return false;
}
}else if(!isdigit(s[i])) return false;
i++;
}
return true;
}
};