表示数值的字符串

image.png

字符串匹配算法:有限状态自动机

image.png
只有有出去的边才能对应变换状态,否则就会报错。

  • 例子:
    设置初始节点为0,接收节点为1,当进行一系列的输入,使得状态机的状态不断变化,只要最后一个输入使得状态机处于接收节点,那么就表明当前输入可以被状态机接收。例如对应字符串”abaaa”, 从初始节点0开始,状态机根据该字符串的输入所形成的状态变化序列为:{0,1,0,1,0,1}。由于最后状态机处于状态1,所以该字符串可以被状态机接收。如果输入的字符串是:abbaa, 那么状态机的变化序列为:{0,1,0,0,1,0}, 由于最后状态机处于非接收状态,因此这个字符串被状态机拒绝。
    有限状态自动机 本题讲解

    重点

    每次输入都会引起状态的改变或者不变。再次输入一个值,状态又会改变。,这种情况就用限状态自动机。

    本题思路

  • 找到所有状态罗列出来,建立每次输入都改变他状态的状态转移。如果最后的状态是合法的,那么证明这个输入符合条件。合法的状态就是满足题目要求
  • 根据题目要求找到状态:也就是字符类型:image.png
  • 根据字符类型定义不同的状态,本题分为9个状态
    image.png
  • 结束状态
    合法的结束状态有 2, 3, 7, 8 。
    满足题目要求
  • image.png
    状态合法之后再从新起点判断后续是否合法
    image.png
  • 算法流程,首先定义一个状态数组,然后每个状态定义一个HashMap,其中输入键值对,键对应输入的字符,值对应输入这个字符之后跳转到的新状态,然后把状态的HashMap放到状态数组里。
    image.png
    注意

    • Map生成一个内部类,在构造器里面执行put方法
    private Map<Character,Character> map = new HashMap<Character,Character>(){
      {
          put('(',')');
          put('{','}');
          put('[',']');
      }
    };

题解

image.png
image.png
这个是首先把字符串两端的空格符、制表符、换行符用trim函数删除,然后里面就只剩下数字+-.和e了,如果里面还有空格符的话那也不符合数值的题目要求了,就可以直接return false


Loccy
4 声望1 粉丝