Kth Distinct String in an Array

easy array hash map string counting

Problem

A distinct string is a string present only once in an array. Given an array arr of strings and an integer k, return the kth distinct string present in arr; if fewer than k distinct strings exist, return "".

Inputarr = ["d", "b", "c", "b", "c", "a"], k = 2
Output"a"
"d" and "a" appear once; the 2nd distinct one in order is "a".

def kth_distinct(arr, k):
    from collections import Counter
    cnt = Counter(arr)
    seen = 0
    for s in arr:
        if cnt[s] == 1:
            seen += 1
            if seen == k:
                return s
    return ""
function kthDistinct(arr, k) {
  const cnt = new Map();
  for (const s of arr) cnt.set(s, (cnt.get(s) || 0) + 1);
  let seen = 0;
  for (const s of arr) {
    if (cnt.get(s) === 1) {
      if (++seen === k) return s;
    }
  }
  return "";
}
class Solution {
    public String kthDistinct(String[] arr, int k) {
        Map<String, Integer> cnt = new HashMap<>();
        for (String s : arr) cnt.merge(s, 1, Integer::sum);
        int seen = 0;
        for (String s : arr) {
            if (cnt.get(s) == 1 && ++seen == k) return s;
        }
        return "";
    }
}
string kthDistinct(vector<string>& arr, int k) {
    unordered_map<string, int> cnt;
    for (auto& s : arr) cnt[s]++;
    int seen = 0;
    for (auto& s : arr) {
        if (cnt[s] == 1 && ++seen == k) return s;
    }
    return "";
}
Time: O(n) Space: O(n)