解析C++ kthDistinct函数代码逻辑,重点理解指定遍历判断段
代码整体功能
该C++函数的作用是从传入的字符串数组arr中,找出第k个仅出现一次的字符串,如果符合要求的字符串数量不足k个,则返回空字符串。
逐段逻辑讲解
前置计数逻辑
unordered_map<string, int> m; for (auto &s : arr) ++m[s];
这部分先遍历整个数组,用哈希表m统计每个字符串的出现次数:键是数组里的字符串,值是对应字符串的出现次数。
核心逻辑段(//From here 到 //to here)
for (auto &s : arr) if (m[s] == 1 && --k == 0) return s; return "";
这段的执行逻辑按顺序拆解:
- 第二次按原数组的顺序遍历每一个字符串
s - 对每个字符串的判断用了短路逻辑与
&&,只有前一个条件成立时才会执行后一个判断:- 第一个判断
m[s] == 1:检查当前字符串是不是只出现过一次的「独特字符串」 - 只有第一个条件满足时,才会执行
--k == 0:把计数器k减1,判断减完之后k是否等于0,等于0就说明当前的这个独特字符串就是我们要找的第k个
- 第一个判断
- 一旦两个条件都满足,直接返回当前的字符串
s - 如果遍历完整个数组都没有找到符合要求的第k个独特字符串,最后返回空字符串
""
示例演示
比如输入arr = ["a","b","a","c","d"],k=2:
- 第一次统计完哈希表:
a:2, b:1, c:1, d:1 - 第二次遍历数组:
- 第一个元素是
a,出现次数为2,直接跳过 - 第二个元素是
b,出现次数为1,k减1变为1,不等于0,继续遍历 - 第三个元素是
a,跳过 - 第四个元素是
c,出现次数为1,k减1变为0,符合条件,返回c,也就是第2个独特字符串
- 第一个元素是
内容的提问来源于stack exchange,提问作者Chetan Jha
相关产品推荐
相关产品推荐

