【題目描述】
Validate if a given string is numeric.
給定一個字符串,驗證其是否為數(shù)字。
【題目鏈接】
www.lintcode.com/en/problem/valid-number/
【題目解析】
這是一道檢查字符串輸入是否為合法的題目?;疽?guī)則是按照科學(xué)計數(shù)法,所以會出現(xiàn)的特殊字符有以下幾個:符號位‘+’,‘-’,小數(shù)點‘.’,還有‘e’和‘E’,剩下的就只有數(shù)字0-9了,其他字符如果出現(xiàn)就是非法字符,返回false。數(shù)字字符在哪里出現(xiàn)都是ok的,我們主要考慮幾個特殊字符的情況。
對于小數(shù)點出現(xiàn)的時候,我們要滿足一下這些條件:(1)前面不能有小數(shù)點或者‘e’和‘E’;(2)前一位是數(shù)字(不能是第一位)或者后一位要是數(shù)字(不能是最后一位)。
對于正負(fù)號出現(xiàn)的情況,要滿足條件:(1)必須是第一位或者在‘e’和‘E’后一位;(2)后一位要是數(shù)字。
對于‘e’和‘E’的情況,要滿足:(1)前面不能有‘e’和‘E’出現(xiàn)過;(2)不能是第一位(前面沒數(shù)字科學(xué)計數(shù)沒有意義)或者最后一位(后面沒數(shù)字就不用寫指數(shù)了)。
根據(jù)上面列舉的情況,我們用兩個標(biāo)簽和做前后位的判斷來實現(xiàn),算法復(fù)雜度比較明顯是O(n)的,只需要O(1)的額外空間。
【參考答案】