有限自动状态机
大多数介绍有限自动状态机的帖子都是写了原理,那这个原理怎么落地呢。我弄了一个简单易于理解的示例写一下。
有限自动机有3个部分:
1,当前状态,
2,当前输入,
3,当前状态对应的当前输入,所应该执行的操作。
其中,3会产生一个新的状态1。对应一个新的输入2。
从而实现循环
举例:
一个状态:[x,y]。 初始状态为 [1,0]
对应的输入:A,B
A对应的操作:产生新的状态 [2 * x + y,y ]
B对应的操作:产生新的状态 [x, 2 * y + x]
图示如下:
- | 输入A | u输入B |
---|---|---|
状态 : [x,y] | 操作:[2 * x + y,y ] | [x, 2 * y + x] |
代码实现
class Solution {
// 状态,输入,产生对应的新状态
public int[] changeStatus(int[] status, char order){
int x = status[0];
int y = status[1];
if (order=='A'){
status[0] = 2 * x + y;
} else if (order=='B'){
status[1] = 2 * y + x;
}
return status;
}
// 循环获得最终结果
public int calculate(String s) {
int[] status = new int[]{1,0};
for (int i=0;i<s.length();i++){
status = this.changeStatus(status, s.charAt(i));
}
return status[0]+status[1];
}
}