怎樣迅速匹配兄弟字串

2021-09-07 12:49:48 字數 1117 閱讀 2199

假設兩個字串的字元一樣,可是順序不一樣,被覺得是兄弟字串。問怎樣在迅速匹配兄弟字串(如,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中保證不出現...