classSolution{publicintmyAtoi(String s){Automaton automation=newAutomaton();int length=s.length();for(int i=0;i<length;i++){
automation.get(s.charAt(i));}return(int)automation.sign*(int)automation.ans;}}classAutomaton{publicint sign=1;publiclong ans=0;privateString state="start";privateMap<String,String[]> table=newHashMap<String,String[]>(){{put("start",newString[]{"start","signed","in_number","end"});put("signed",newString[]{"end","end","in_number","end"});put("in_number",newString[]{"end","end","in_number","end"});put("end",newString[]{"end","end","end","end"});}};publicvoidget(char c){
state = table.get(state)[get_col(c)];if("in_number".equals(state)){
ans = ans *10+ c -'0';
ans = sign ==1?Math.min(ans,(long)Integer.MAX_VALUE):Math.min(ans,-(long)Integer.MIN_VALUE);}elseif("signed".equals(state)){
sign = c =='+'?1:-1;}}privateintget_col(char c){if(c ==' '){return0;}if(c =='+'|| c =='-'){return1;}if(Character.isDigit(c)){return2;}return3;}}