表示数值的字符串
字符串匹配算法:有限状态自动机
只有有出去的边才能对应变换状态,否则就会报错。
例子:
设置初始节点为0,接收节点为1,当进行一系列的输入,使得状态机的状态不断变化,只要最后一个输入使得状态机处于接收节点,那么就表明当前输入可以被状态机接收。例如对应字符串”abaaa”, 从初始节点0开始,状态机根据该字符串的输入所形成的状态变化序列为:{0,1,0,1,0,1}。由于最后状态机处于状态1,所以该字符串可以被状态机接收。如果输入的字符串是:abbaa, 那么状态机的变化序列为:{0,1,0,0,1,0}, 由于最后状态机处于非接收状态,因此这个字符串被状态机拒绝。
有限状态自动机 本题讲解重点
每次输入都会引起状态的改变或者不变。再次输入一个值,状态又会改变。,这种情况就用限状态自动机。
本题思路
- 找到所有状态罗列出来,建立每次输入都改变他状态的状态转移。如果最后的状态是合法的,那么证明这个输入符合条件。合法的状态就是满足题目要求
- 根据题目要求找到状态:也就是字符类型:
- 根据字符类型定义不同的状态,本题分为9个状态
- 结束状态
合法的结束状态有 2, 3, 7, 8 。
满足题目要求
状态合法之后再从新起点判断后续是否合法算法流程,首先定义一个状态数组,然后每个状态定义一个HashMap,其中输入键值对,键对应输入的字符,值对应输入这个字符之后跳转到的新状态,然后把状态的HashMap放到状态数组里。
注意- Map生成一个内部类,在构造器里面执行put方法
private Map<Character,Character> map = new HashMap<Character,Character>(){ { put('(',')'); put('{','}'); put('[',']'); } };
题解
这个是首先把字符串两端的空格符、制表符、换行符用trim函数删除,然后里面就只剩下数字+-.和e了,如果里面还有空格符的话那也不符合数值的题目要求了,就可以直接return false
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。