【发布时间】:2019-07-25 02:29:26
【问题描述】:
if (strlen(a) != strlen(b)) {
printf("Not anagram");
} else {
for (int i = 0; i < strlen(a); i++) {
for (int j = 0; j < strlen(b); j++) {
if (a[i] == b[j]) {
len++;
}
}
}
if (len != strlen(a))
printf("Not anagram");
else
printf("Anagram");
}
return 0;
这是一个代码 sn-p 来检查 2 个字符串是否是字谜。这里如何处理重复字符?另外,这个程序可以更优化吗?这段代码的运行时复杂度是多少?
【问题讨论】:
-
这真的是Objective-C吗?看起来更像是纯 C。
-
对不起,我会编辑标签。
-
我认为更好的算法是按字母顺序对两个单词中的字母进行排序,然后比较它们是否相等。
-
您的方法通常是 O(n^2),其中 n 是每个字符串的长度。但是,您的实现是 O(n^3),因为您在 each 迭代中重新计算
strlen。如果你采用排序方法,你可以做到 O(n log n) 或 O(n) 时间。