AcWing 31. 表示数值的字符串
原题链接
困难
作者:
Eternity_7
,
2021-03-29 14:04:57
,
所有人可见
,
阅读 332
class Solution {
public boolean isNumber(String s) {
if(s == null || s.length() == 0){
return false;
}
s = s.trim();
if(s.length() == 0){
return false;
}
if(s.charAt(0) == '+' || s.charAt(0) == '-'){
s = s.substring(1,s.length());
}
// 排除 +,-,.
if(s.length() == 0 || s.charAt(0) == '.' && s.length() == 1){
return false;
}
int dot = 0, e = 0;
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) >= '0' && s.charAt(i) <= '9'){}
else if(s.charAt(i) == '.'){
dot++;
if(dot > 1 || e > 0){ // 122333.111.111 .2222.33 1e+333.
return false;
}
}else if(s.charAt(i) == 'e' || s.charAt(i) == 'E'){
e++;
// e222, e1, 1122e111e, 1122.e
if(i == 0 || i + 1 == s.length() || e > 1 || s.charAt(i-1)== '.' && i == 1){
return false;
}
// 32213e+111 1222e-1112
if(i + 1 < s.length() && (s.charAt(i+1) == '+' || s.charAt(i+1) == '-')){
// 112333e.
if(i + 2 == s.length()) return false;
i++;
}
}else{
return false;
}
}
return true;
}
}