AcWing 31. 表示数值的字符串
原题链接
困难
作者:
月涌江流
,
2019-03-17 22:29:55
,
所有人可见
,
阅读 1335
Python 代码
class Solution(object):
def isNumber(self, s):
if len(s) == 0 :
return False
if s[0] == '-' or s[0] == '+':
s = s[1:] #忽略首位加减号
if len(s) == 0 or s[0] == '.' and len(s) == 1 : #字符串为空或只有一个'.'
return False
dot = 0 ; e = 0 ;i = 0
while(i < len(s)):
if s[i] >= '0' and s[i] <= '9':
pass
elif s[i] == '.':
dot +=1
if e or dot > 1:
return False #'.'前出现过'e',或'e'多于1个
elif s[i] == 'e' or s[i] == 'E':
e +=1
if (not i) or (i + 1 == len(s)) or (e > 1) or (i == 1 and s[0] == '.'):
return False #'e'在首、'e'在尾 、'e'多于1、'.e'在首
if s[i + 1] == '+' or s[i + 1] == '-':
if i + 2 == len(s):
return False #'e+'在尾
else: i +=1 #'e+'出现在除首外其余位置(因为e不在首)
else:
return False #出现非首位+、或其余符号
i += 1
return True