檢驗兩個字串是否為兄弟字串

2021-06-18 10:41:05 字數 862 閱讀 2410

如果兩個字串的字元一樣,但是順序不一樣,被認為是兄弟字串,問如何在迅速匹配兄弟字串(如,bad和adb就是兄弟字串)。

class testbro 

public static boolean test(string str1, string str2)

return true;

} }}

無意中看到的另一種思路,以下為引用。

「給26個字元依次賦予質數。質數是比較特殊的一堆數字,它們只能被1和本身整除。

給a賦值2、給b賦值3、給c賦值5、給d賦值7、給e賦值11、給f賦值13 等等……

好了,給兩個字串中的所有字元都賦值了,,接著讓它們各自相加,如果兩個字串得出的結果是一樣的,那它們是兄弟字串。。

嘎嘎,時間複雜度是常數。效能好了是不????

別太高興了,這個演算法到目前為止也是有問題的,來看看這種情況:bf和ce不是兄弟字串,按照上面的賦值規律b+f=3+13=16;c+e=5+11=16 ,看吧,明明他們就不是兄弟字串,但是按照上面的演算法就錯了。

怎麼解決這個問題了?用乘積:每個字串內部求乘積,相等就是兄弟字串。

好了,這演算法是正確的,但是呢,又有個演算法外的問題:字串相乘及其容易出現結果溢位,說得簡單點就是乘積太大了,大於程式語言的內建的整數型別(int、long)所能表示的最大值。這怎麼解決?有個比較偏的方法就是用陣列來儲存乘積。具體方法我不說了,跟本偏文章無關。。。

那怎麼解決兄弟字串的問題???用平方和或者立方和。。。。。既然直接用加法不行,用乘法還會溢位。那換個思路用平方和。。。

b*b+f*f=3*3+13*13=178;c*c+e*e=5*5+11*11=146

看吧它們不是兄弟字串吧。。。。。」

字串 判斷兩個字串是否為變形詞

問題 給定兩個字串str1和str2,如果str1和str2中出現的字元種類一樣並且每種字元出現的次數也一樣,那麼str1與str2互為變形詞。請實現函式判斷兩個字串是否互為變形詞。舉例 str1 123 str2 231 返回true str1 123 str2 2331 返回false 基本思路...

如何判斷兩個字串是否為換位字串

題目 換位字串是指組成字串的字元相同,但位置不同。例如 由於字串 aaaabbc 與字串 abcbaaa 就是由相同的字元所組成的。因此,他們是換位符。hash統計法 顧名思義將字母hash到乙個key上,然後通過計數去最後比較。由於乙個字母就可以當key,所以直接使用key為uint8 因為直接通...

字串問題 判斷兩個字串是否為變形詞

問題 給定兩個字串str1和str2,如果str1和str2中出現的字元種類一樣並且每種字元出現的次數也一樣,那麼str1與str2互為變形詞。請實現函式判斷兩個字串是否互為變形詞。舉例 str1 123 str2 231 返回true str1 123 str2 2331 返回false 基本思路...