剑指 Offer 20. 表示数值的字符串

新名词

编译原理–词法分析
有限自动机
这个有限自动机我有印象,在软考里面见过。

题目描述:

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

崩溃。。。
其实题不难
但是还是写了这么久写了一堆if else
在这里插入图片描述

在这里插入图片描述

代码

class Solution {
    public boolean isNumber(String s) {
           char[] arr = s.toCharArray();

        int start = 0;
        while (start<arr.length && arr[start]==' ')start++;
        int end = arr.length-1;
        while (end>=0 && arr[end]==' ') end--;
        if(end < start) return false;
        int dot = -1;
        int e = -1;
        int i = start;
        
        if((arr[start] == '-'|| arr[start]== '+')&& start+1<=end ){
            i++;
            start++;
        }
        for(;i<=end;i++){
            if(arr[i]<='9'&&arr[i]>='0'){
                continue;
            }else if(arr[i]=='.'){
                if(dot == -1)dot = i;
                else return false;
            } else if(arr[i]=='e'||arr[i]=='E'){
                if(e==-1) e = i;
                else return false;
            } else if(arr[i] == '+' ||arr[i]=='-'){
                if(e!=i-1) return false;
                if(i==end)return false;
            }else {
                return false;
            }
        }
        if(e==end||e==start)return false;
        if(dot!=-1&&e!=-1){

            if(dot>e) return false;
            if(dot==start&&dot+1==e)return false;
        }
       if(dot==start&&dot==end)return false;

        return true;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值