数据结构----表示数值的字符串

题目:

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、“±5”、"-1E-16"及"12e+5.4"都不是。

LeetCode原题:表示数值的字符串

分析一下能够字符串能够表示数值的满足条件有:

  1. 指数符号只能出现一次;
  2. 正负号出现的地方的前一位置必须是指数符号,或者是在开头位置出现;
  3. 指数符号不能出现在开头;
  4. 小数点同样只能出现一次,并且不能在指数符号出现以后再出现;
  5. 只能包含指数符号、小数点、数字字符;
  6. 指数出现以后,必须有数字出现;

捋一下总体思路:

  1. 指数符号出现第二次,返回False;
  2. 如果正负号出现时,前一位置不是指数符号,返回False;
  3. 数字字符出现之前,不能出现指数符号,否则False;
  4. 出现其他类型字符,返回Flase;
  5. 指数出现以后,小数点不能在出现,否则Flase,小数点只能出现一次,否则也是False;
  6. 指数出现以后,如果没有数字出现,False;

翻译成代码如下:

class Solution:
    def isNumber(self, s: str) -> bool:
        s = s.strip()
        met_dot = met_e = met_digit = False
        for i, char in enumerate(s):
            if char in ('+', '-'):
                if i > 0 and s[i-1] != 'e' and s[i-1] != 'E':
                    return False
            elif char == '.':
                # 遇到小数点之前不能有小数点出现过或者有指数 e 出现
                if met_dot or met_e:
                    return False
                met_dot = True
            elif char == 'e' or char == 'E':
                # 遇到指数符号时,之前不能有指数符号,而且指数符号前必须有数字
                if met_e or not met_digit:
                    return False
                met_e, met_digit = True, False # e后必须接数字,所以这时重置met_digit为False,以免e为最后一个char
            elif char >= '0' and char <= '9':
                met_digit = True
            else: # 遇到其他类型字符
                return False

        return met_digit
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值