假設兩個字串的字元一樣,可是順序不一樣,被覺得是兄弟字串。問怎樣在迅速匹配兄弟字串(如,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,次數一樣即為同樣的。
方法三**
#include#include#include#includeusing namespace std;
int main()
//字元是否同樣
memset(hash1,0,sizeof(hash1));
memset(hash2,0,sizeof(hash2));
for(i=0;ifor(i=0;i<255;i++)
if(i==255)
printf("%s,%s,二者是兄弟字串\n",str1,str2);
else
printf("%s,%s,二者不是兄弟字串\n",str1,str2); }}
/*bad abd
abcd abc
aabbccdd abcdabcd
abcdabc aabbccc
aaa bbb
ababa babab
ababa aabba
0*/
173 如何迅速匹配兄弟字串
3.如果兩個字串的字元一樣,但是順序不一樣,被認為是兄弟字串,問如何在迅速匹 配兄弟字串 如,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中保證不出現...