2つの文字列がアナグラムであるかどうかを確認するための効率的な解決策を探していますが、charテーブル/辞書の確認はUnicodeの適切な解決策ではない可能性があります。私は解決策を考え出しましたが、それが数学的に正しいことを証明する方法がわかりません。式は、「(a + b)=(c + d)およびXOR b XOR c XOR d = 0 ==>(a、b)および(c、d)はアナグラムです」と表現されています。多分あなたは私を助けることができます。以下は実装です。
def isAnagram(s1: String, s2: String): Boolean = {
if (s1.length != s2.length) return false
else {
var numVal = 0
var bitVal = 0
for (i <- 0 until s1.length) {
numVal += s1(i) - s2(i)
bitVal ^= s1(i) ^ s2(i)
}
return numVal == 0 && bitVal == 0
}