2053-数组中第 K 个独一无二的字符串
独一无二的字符串 指的是在一个数组中只出现过 一次 的字符串。
给你一个字符串数组 arr
和一个整数 k
,请你返回 arr
中第 k
个 独一无二的字符串 。如果 少于 k
个独一无二的字符串,那么返回 空字符串 ""
。
注意,按照字符串在原数组中的 顺序 找到第 k
个独一无二字符串。
示例 1:
**输入:** arr = ["d","b","c","b","c","a"], k = 2
**输出:** "a"
**解释:**
arr 中独一无二字符串包括 "d" 和 "a" 。
"d" 首先出现,所以它是第 1 个独一无二字符串。
"a" 第二个出现,所以它是 2 个独一无二字符串。
由于 k == 2 ,返回 "a" 。
示例 2:
**输入:** arr = ["aaa","aa","a"], k = 1
**输出:** "aaa"
**解释:**
arr 中所有字符串都是独一无二的,所以返回第 1 个字符串 "aaa" 。
示例 3:
**输入:** arr = ["a","b","a"], k = 3
**输出:** ""
**解释:**
唯一一个独一无二字符串是 "b" 。由于少于 3 个独一无二字符串,我们返回空字符串 "" 。
提示:
1 <= k <= arr.length <= 1000
1 <= arr[i].length <= 5
arr[i]
只包含小写英文字母。
方法一:哈希表
思路与算法
我们可以用哈希表来统计数组 arr 中每种字符串的频数。
统计完成后,我们顺序遍历数组,如果遍历到的字符串在数组中出现频数为 1,则我们将计数 k 减去 1。当上述操作后 k 到达 0 时,对应的字符串即为第 k 个独一无二的字符串,我们返回该字符串作为答案。若遍历完成数组,k 仍未到达 0,则该数组中不存在第 k 个独一无二的字符串,此时我们返回 -1。
代码
1 | class Solution { |
1 | class Solution: |
复杂度分析
时间复杂度:O(\sum_i n_i),即数组 arr 中字符串长度总和,其中 n_i 为字符串 arr}[i] 的长度。即为维护频数哈希表和寻找第 k 个独一无二的字符串的时间复杂度。
空间复杂度:O(\sum_i n_i),即为哈希集合的空间开销。
Comments