题目要求
找到字符串列表中的第k个唯一的字符串。
思路
找到字符串中唯一的字符串,就是判断字符串是否重复出现,因此很自然的想到用哈希表。首先想到用字符数组来存储,结果发现arr中存储的是字符串。因此采用unordered_map
class Solution {
public:
string kthDistinct(vector<string>& arr, int k) {
int record[26] = {0};
for (int i = 0; i < arr.size(); ++i) {
if (record[arr[i] - 'a'] == 0) {
k--;
}
record[arr[i] - 'a']++;
if (k == 0) {
return arr[i];
}
}
}
};
C++(如果只出现一次就是Distinct,在哈希表中数值为1)
class Solution {
public:
string kthDistinct(vector<string>& arr, int k) {
unordered_map<string, int> countMap;
for (const string& s : arr) {
countMap[s]++;
}
// Find k-th distinct string
for (const string& s : arr) {
if (countMap[s] == 1) {
k--;
if (k == 0) {
return s;
}
}
}
return "";
}
};
Python(Counter能够直接把列表变成哈希表)
from collections import Counter
class Solution:
def kthDistinct(self, arr: List[str], k: int) -> str:
# Count the occurrences of each string
countMap = Counter(arr)
# find the k-th distinct string
for s in arr:
if countMap[s] == 1:
k -= 1
if k == 0:
return s
return ""