DFA:字符串轉換整數

Deterministic Finite Automaton
自動機

主要是要明確 :

狀態表
其中表格狀態可以用unordered_map構造,並且用一個state(int)記錄當前的狀態, get_col(char c)獲取狀態,table獲取state行狀態。

於是可以寫出代碼:

class Automation{
    int state=1;
    unordered_map<int,vector<int> > table={
        {1,{1,2,3,4}},
        {2,{4,4,3,4}},
        {3,{4,4,3,4}},
        {4,{4,4,4,4}}
    };
    int get_col(char c)
    {
        if(isspace(c))return 0;
        if(c=='+'||c=='-')return 1;
        if(isdigit(c)) return 2;
        return 3;
    }
public:
    int sign=1;
    long long res=0;
    bool run(char c)
    {
        state=table[state][get_col(c)];
        if(state==3){
            res=res*10+c-'0';
            res=sign==1?min(res,(long long)INT_MAX):min(res,-1*(long long)INT_MIN);
        }else if(state==2){
            sign=c=='-'?-1:1;
        }else if(state==4){
            return false;
        }return true;
    }
};
class Solution {
public:
    int myAtoi(string str) {
        Automation a;
        for(char c:str){
            if(!a.run(c))break;
        }
        return a.sign*a.res;      
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章