当前位置:   article > 正文

前端的有限状态机_前端有限状态及

前端有限状态及

有限状态机 说白了就是根据不同的字符串状态,去归类

function stringMatcher(input) {
  // 定义状态
  const states = {
    START: 'START',
    A: 'A',
    B: 'B',
    REJECT: 'REJECT',
    ACCEPT: 'ACCEPT',
  };

  // 定义状态转换规则
  const transitions = [
    { from: states.START, to: states.A, input: 'a' },
    { from: states.A, to: states.A, input: 'a' },
    { from: states.A, to: states.B, input: 'b' },
    { from: states.B, to: states.B, input: 'b' },
    { from: states.B, to: states.REJECT, input: 'a' },
  ];

  // 初始状态为 START
  let currentState = states.START;

  // 遍历输入字符串
  for (const char of input) {
    let nextState = states.REJECT;
    // 查找下一个状态
    for (const transition of transitions) {
      if (transition.from === currentState && transition.input === char) {
        nextState = transition.to;
        break;
      }
    }
    // 如果没有找到下一个状态,则字符串不符合规则
    if (nextState === states.REJECT) {
      return false;
    }
    currentState = nextState;
  }

  // 如果最终状态是 ACCEPT,则字符串符合规则
  return currentState === states.B;
}

// 测试字符串匹配
console.log(stringMatcher('ab')); // true
console.log(stringMatcher('aaab')); // false
console.log(stringMatcher('abb')); // false
console.log(stringMatcher('abab')); // false
console.log(stringMatcher('')); // false
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/696564
推荐阅读
相关标签
  

闽ICP备14008679号