CTCI Ch.1.2 检查排列

问题描述

问候和节日快乐,

我的问题涉及“破解编码面试”第 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 不是排列。