CTCI Ch.1.2 检查排列

CTCI Ch.1.2 Check Permutation

问候,节日快乐,

我的问题涉及“Cracking The Coding Interview”第 6 版中的问题“1.2 Check Permutation”

当我们比较这两个字符串时,我们会检查数组中是否有任何值小于 0。这表明我们的两个字符串的字符数不同。但是,比较不应该是 !== 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 不是排列。