3. 如果兩個字串的字元一樣,但是順序不一樣,被認為是兄弟字串,問如何在迅速匹
配兄弟字串(如,bad和adb就是兄弟字串)。思路:判斷各自素數乘積是否相等。
1、判斷兩個字串的長度是否一樣。
2、每個字串按字元排序,如acb排序之後是abc,如果是兄弟字串的話,排序之後是一樣的。
給26個字元依次賦予質數。質數是比較特殊的一堆數字,它們只能被1和本身整除。
給a賦值2、給b賦值3、給c賦值5、給d賦值7、給e賦值11、給f賦值13 等等……
加法:兩個字串中的所有字元都賦值了,接著讓它們各自相加,如果兩個字串得出的結果是一樣的,那它們是兄弟字串。
但是,b+f=3+13=16;c+e=5+11=16,所以有誤;
乘法:兩個字串中的所有字元讓它們各自相乘,方法是對的,但是會溢位,所以要大整數處理了;
用平方和或者立方和:考慮平方和會不會解決加法有誤,乘法溢位:b*b+f*f=3*3+13*13=178;c*c+e*e=5*5+11*11=146;
用hashmap可以,以字母為key,出現的次數為value,次數一樣即為相同的;
程式實現乙個方法三:hash吧
#include#include#include#includeusing namespace std;
int main()
//字元是否相同
memset(hash1,0,sizeof(hash1));
memset(hash2,0,sizeof(hash2));
for(i=0;i
怎樣迅速匹配兄弟字串
假設兩個字串的字元一樣,可是順序不一樣,被覺得是兄弟字串。問怎樣在迅速匹配兄弟字串 如,bad和adb就是兄弟字串 思路 推斷各自素數乘積是否相等。方法一 1 推斷兩個字串的長度是否一樣。2 每乙個字串按字元排序。如acb排序之後是abc,假設是兄弟字串的話,排序之後是一樣的。方法二 給26個字元依...
字串匹配
題目描述 讀入資料string 然後讀入乙個短字串。要求查詢string 中和短字串的所有匹配,輸出行號 匹配字串。匹配時不區分大小寫,並且可以有乙個用中括號表示的模式匹配。如 aa 123 bb 就是說aa1bb aa2bb aa3bb都算匹配。輸入 輸入有多組資料。每組資料第一行輸入n 1 n ...
字串匹配
time limit 1000ms memory limit 65536k 給定兩個字串string1和string2,判斷string2是否為string1的子串。輸入包含多組資料,每組測試資料報含兩行,第一行代表string1,第二行代表string2,string1和string2中保證不出現...