2011-10-08 57 views
0

如果字符串A和字符串B包含相同的字符,則稱它們爲「兄弟字符串」。
例如:「abc」和「cab」,「aabb」和「baab」。
問題是如何檢查兩個字符串是兄弟字符串(快)?如何檢查兩個字符串是否是「兄弟字符串」?

+1

你有一個字母表,所以可編碼字符的數量是已知的和有限的。桶對字符串進行排序並在'O(n)'中進行比較。 – davin

+0

關於最簡單的你可以做到這一點:'sorted(a)== sorted(b)'(Python) –

+0

這是一個簡單的案例http://stackoverflow.com/q/6691184/395626 – ruslik

回答

5

排序,然後比較他們,或使每個字符的數量在地圖上某種然後比較最後的計數。

+0

那麼它是哪一個呢?排序還是計數?這兩種選擇有什麼區別? – svick

+0

計數是O(n),排序取決於您使用的方法。 – lostyzd

+0

計數很簡單...製作兩個26-整數數組,遍歷字符串併爲字符串中的每個字符遞增相應的計數器。最後,如果我理解他描述的是正確的,那麼你將XOR計數器放在一起,如果一切都爲0,那麼它們就是兄弟。 – bdares

0

什麼都字符數組,並以計數的B的等」 的數量比比較兩個數組的

0

這種情況下最快的算法具有O(n)的複雜度,其中n是最長字符串的長度。

In fact in O(n)you can create a array(one for each string)where characters are stored。此外,你需要另外的O(n)時間來做測試。

+0

如果我理解他描述的是正確的,那麼這些字符串必須具有相同的長度。 –

+0

我不知道你在說什麼。 – svick

+0

@AurelioDeRosa,我知道什麼是O符號。但我不知道你的答案如何與問題實際相關。你談論創建一些數組,然後做一些測試。但是你不清楚你想要創建什麼樣的陣列以及你想要執行什麼樣的測試。 – svick

2

只需計算每個字符在字符串中出現的次數。然後他們比較兩個字符串的計數。

如果字符串總是ASCII或一些8位編碼,那麼簡單數組就足夠了。

如果它們可以包含Unicode字符,請使用哈希映射。

+0

對downvoter:謹慎評論你認爲這個答案錯了​​嗎? – svick

0

讓我來展示我的變體。每個字符都有它的int ASCII值。所以我認爲,你可以將兩個字符串的所有字符相乘,並比較兩個產品。例如:

private static boolean compareForBrother(String s1, String s2) { 
    long lProduct= 1L; 
    for (byte b : s1.getBytes()) { 
     lProduct *= b; 
    } 

    long lProduct2= 1L; 
    for (byte b : s2.getBytes()) { 
     lProduct2 *= b; 
    } 

    return (lProduct2 == lProduct); 
} 
0

比較每個字符串中的字符集。

在Python中,是這樣的:

if set(stringA) == set(stringB): 
    print("%s and %s are brother strings" % (stringA, stringB)) 
0

準備字符頻率的直方圖;這與基數排序完全相同。然後比較直方圖。

相關問題