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

相關文章
相關標籤/搜索