DFA Parse Integer

这题看一眼就会发现要考虑的各种奇葩 case 实在是太多了。。。对于这类需要 parse 的同时考虑 N 多种不同状态的字符串处理问题,就老老实实用 DFA (Deterministic Finite Automata) 吧,要不会被折磨疯的。

记得先把输入字符 trim 一下,免得前后空格不好处理。

状态列表,每一个独立状态用一个 char 表示;

  • s : 还未看到 + / - 号的起始状态

  • S : 已看到符号的起始状态

  • N : 读到数字了,还没遇到 '.' 或 'e'

  • d : 首次碰到 '.',后面还没有遇到数字

  • D : 已碰到 '.' 并且后面有数字

  • e : 首次碰到 'e',后面还没有数字

  • E : 已碰到 'e' 并且后面有数字

  • F : 违法状态,一定为 false;

DFA 结构如图~ 所有没画出来的边都是 'F',以双圈结束(小写字母)的也都是 'F'.

一个意思,就是 DFA 结构稍微变了点。

检查 overflow 简便方法:

  • next = cur * 10 + newVal;

  • if(next / 10 != cur), overflow.

刷题刷到现在我才深切体会到当初 bloomberg 面试题是多么的傻逼。。

Last updated

Was this helpful?