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
| class Solution { public: bool isNumber(string s) { stringstream ss; ss << s; vector<unordered_map<char, int>> states = { { {' ', 0},{ 's', 1},{ 'd', 2}, {'.', 4} }, { {'d', 2},{ '.', 4} } , { {'d', 2},{ '.', 3}, {'e', 5}, {' ', 8} }, { {'d', 3}, {'e', 5}, {' ', 8} }, { {'d', 3} }, { {'s', 6}, {'d', 7} }, { {'d', 7} }, { {'d', 7}, {' ', 8} }, { {' ', 8} } }; int pre = 0; while (ss.peek() != -1) { char c = ss.get(); char cur; if ('0' <= c && c <= '9') cur = 'd'; else if (c == '+' || c == '-') cur = 's'; else if (c == 'e' || c == 'E') cur = 'e'; else if (c == '.' || c == ' ') cur = c; else cur = '?'; if (states[pre].count(cur) <= 0) return false; pre = states[pre][cur]; } return pre == 2 || pre == 3 || pre == 7 || pre == 8; } };
|