找出字符串是否是字谜 - 重访

Aja*_*jai 4 c++ algorithm

我确信在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)

Val*_*ond 6

对不起,但这不行.

当然,如果它是一个字谜,代码(如果它正常工作)会这样说,但你也会有很多'误报',因为几个(不同的)字符串可以产生相同的输出.

  • +1:例如,TonyK指出的"ab"和"ef". (2认同)