问题描述
问候和节日快乐,
我的问题涉及“破解编码面试”第 6 版中的“1.2 检查排列”问题。
当我们比较两个字符串时,我们会检查数组中是否有任何小于 0 的值。这表示两个字符串的字符数不同。但是,比较不应该是 !== 0 而不是
以下是提供的代码解决方案。 (我主要用JS工作,所以可能是我看错了代码)
非常感谢。
boolean permutation(String s,String t) {
if (s.length() != t.length()) {
return false;
}
int[] letters = new int[128];
char[] s_array = s.tochararray();
for (char c : s_array) {
letters[c]++;
}
for (int i = 0; i < t.length(); i++) {
int c = (int) t.charat(i);
letters[c]--;
if (letters[c] < 0) { // this is the line in question
return false;
}
}
return true;
}
解决方法
!= 0
的比较仅在 计算所有差异之后才有意义。代码的结构方式允许及早发现。
第一个测试是针对 s.length() != t.length()
。一旦代码通过它,我们就知道有相同数量的字符。这意味着 - 如果字符串不是排列 - 有一个字符在 t
中出现的次数多于 s
中。一旦找到这样的字符,我们就得出结论 t
不是排列。