隨筆雜談之字串存在性驗證

2021-05-28 18:18:44 字數 959 閱讀 9051

昨天看了一篇帖子,主要是講的老外進google前的面試經歷,帖子的位址如下:

其中談到乙個字串存在性驗證的題目比較有意思,這個老外用了素數的整除來進行求解,當時覺得非常有意思,演算法比較巧妙,不過,今天無意中想到乙個自認為更好的方法,寫下來留個記錄,呵呵。

題目:

假設有乙個各種字母組成的字串,還有另外乙個字串,而且這個字串裡的字母數相對少一些。從演算法上講,什麼方法能最快的查出所有小字串裡的字母在大字串裡都有?

比如,如果是下面兩個字串:

string 1: abcdefghlmnopqrs

string 2: dcgsrqpom

答案是true,所有在string2裡的字母string1也都有。如果是下面兩個字串:

string 1: abcdefghlmnopqrs

string 2: dcgsrqpoz

答案是false,因為第二個字串裡的z字母不在第乙個字串裡。

解法:

我們可以把乙個字串對映到乙個32位的整型數值中,對映方法為:每個字母對應整型的乙個位(如果字母個數超過了整型的最大儲存位數32,其實我們可以簡單的把整數換成整型陣列來實現),例如,

a對應0位,b對應1位,......,z對應25位

那麼,上例的字串abcdefghlmnopqrs,我們就可以轉換成00000001111111100011111111,即數字522495;

字串dcgsrqpom,就可以轉換成00000001111101000001001100,即數字512076;

然後,2個數字進行「按位與」(&)運算,如果結果與第二個數字相同,則為true,否則,為false。

尾聲:

平時經常使用delphi的集合型別,現在想想,上面不就是乙個特例嗎(好像delphi的文件中就提到過,集合型別是用位陣列來實現的哦,呵呵)

PHP隨筆(字串)

轉換字串中的特殊符號為html標記 編寫web互動網頁時,安全問題是一定要考慮的。乙個不可忽略的問題就是對使用者提交資訊的處理。如果使用者提交了惡意html 機會影響到其他使用者的使用,甚至會造成系統癱瘓。所以編寫互動web網頁時,出於安全考慮要對使用者提交內容中的html 進行處理。在php中有乙...

python隨筆 字串

僅供自己使用,不喜勿噴!字串常見方法及其舉例 capitalize 把字串的第乙個字元改為大寫 casefold 把整個字串的所有字元改為小寫 center width 將字串居中,並使用空格填充至長度 width 的新字串 count sub start end 返回 sub 在字串裡邊出現的次數...

Python隨筆之字串和編碼

字串是一種我們平時使用比較多的型別,字串和其他資料型別相比有個特殊的問題,令我們比較頭疼的問題,那就是編碼問題。因為計算機只能處理數字,如果需要處理文字,就需要將其轉換為數字後才能處理。最早計算機在設計的時候採用的是8位 位元 bit 二進位制為乙個位元組 byte 所以乙個位元組能表示的最大的數就...