我确信在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";
}
Run Code Online (Sandbox Code Playgroud)
对不起,但这不行.
当然,如果它是一个字谜,代码(如果它正常工作)会这样说,但你也会有很多'误报',因为几个(不同的)字符串可以产生相同的输出.