class Solution {
public:
bool isNumber(string s) {
int l = 0, r = s.length() - 1;
// 删除前缀中的空白符
while (l <= r && ' ' == s[l]) ++l;
// 删除后缀中的空白符
while (l <= r && ' ' == s[r]) --r;
// 删除前缀中的正负号
if ('-' == s[l] || '+' == s[l]) ++l;
bool ans = false, dot = false, exp = false;
// 从左向右遍历扫描
while (l <= r) {
// 如果为数字字符,则可能正确
if ('0' <= s[l] && '9' >= s[l]) {
ans = true;
}
// '.'最多出现一次,且不能出现在'e'的右侧
else if ('.' == s[l] && !dot && !exp) {
dot = true;
}
// 'e'最多出现一次,且之前部分的字符串可以组成数字类型
else if ('e' == s[l] && !exp && ans) {
exp = true;
ans = false;
}
// '+'或'-'必须出现在'e'之后
else if ('-' == s[l] || '+' == s[l]) {
if ('e' != s[l - 1]) {
return false;
}
}
else {
return false;
}
++l;
}
return ans;
}
};
test
最新推荐文章于 2024-06-19 22:23:29 发布