LeetCode Valid Number so many corner cases
class Solution {
public:
bool isNumber(string s) {
int i,j,n=s.size();
char prev;
bool dot=false;
int is_digit=0;
bool is_e=false;
j=0;
while(j<n && s[j]==' ')
j++;
if(j==n)
return false;
if(s[j]!='-' && s[j]!='+' && s[j]!='.' && !(s[j]>='0' && s[j]<='9'))
return false;
if(s[j]=='-' || s[j]=='+' || s[j]=='.')
{
dot=(s[j]=='.');
j++;
}
if(j==n)
return false;
while(j<n && (s[j]=='e' || s[j]=='+' || s[j]=='-' || s[j]=='.' || (s[j]>='0' && s[j]<='9'))){
if((s[j]=='+' || s[j]=='-') && s[j-1]!='e')
return false;
if(s[j]=='e')
{
if(is_digit==0)
return false;
else if(is_e==true)
return false;
else
is_e=true;
}
if(s[j]=='.'){
if(is_e)
return false;
if(dot)
return false;
else
dot=true;
}
if((s[j]>='0' && s[j]<='9'))
is_digit=1;
j++;
}
if(j==n && is_digit==1 && s[j-1]!='e' && s[j-1]!='+' && s[j-1]!='-')
return true;
else
{
if(j<n){
int idx=j;
while(j<n && s[j]==' ')
j++;
if(j==n && is_digit==1 && s[idx-1]!='e'&& s[j-1]!='+' && s[j-1]!='-')
return true;
else
return false;
}
return false;
}
}
};
No comments:
Post a Comment