我相信在Stack Overflow上已经有多次讨论过这个问题。我只是想验证一下我的答案是否正确。我在这个帖子中看到了这个问题。如果这篇文章是重复的,需要删除,我会马上删掉。
我想用一种更简单的方法来解决这个问题。只需将字符串中的字符进行异或运算即可。
因此,对于每个字符进行异或的时间复杂度为O(n),比较两个字符串中最后一个字符的时间复杂度为O(1),因此总时间复杂度为O(n)。
即使最后一个字符可能是任何特殊符号,但如果字符串是变位词,它们仍然相同。这个逻辑是正确的吗?
所以,与其进行所有的排序和哈希计算,不如采用这个方法。我的代码如下:
char a[7] = "Length";
char b[7] = "enghtL";
for (int i = 1; i < 6; i++) {
a[i] = a[i] ^ a[i-1];
b[i] = b[i] ^ b[i-1];
}
if (a[5] == b[5]) {
cout << "\n The strings are anagrams";
}
else {
cout << "\n No they are not";
}
a
、b
、c
、d
,是否成立((a XOR b XOR c) ≡ (c XOR a XOR b) ≡ (b XOR c XOR a) ≡ (c XOR b XOR a)) ∧ ((a XOR b) ≠ (a XOR d))
,以及在元数的一般化中是否成立?” 我认为不是。 - Lightness Races in Orbit