offer 20 表示数值的字符串 有限状态自动机

表示数值的字符串

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
    注意spa

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

题解

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

相关文章
相关标签/搜索