📌  相关文章
📜  从给定的字符串数组中按字典顺序最小的第 K 个不同字符串

📅  最后修改于: 2022-05-13 01:56:08.655000             🧑  作者: Mango

从给定的字符串数组中按字典顺序最小的第 K 个不同字符串

给定一个具有N个字符串和一个整数K的数组arr ,任务是找到字典上最小的第 K个不同字符串。如果不存在这样的字符串,则打印一个空字符串。

例子:

方法:给定的问题可以通过首先对给定的字符串数组进行排序,然后以频率1打印第K个字符串来解决。按照以下步骤解决这个问题:

  1. 对给定的字符串数组进行排序
  2. 创建一个映射来存储每个字符串的频率。
  3. 现在,遍历映射并在每次找到频率为 1 的字符串时减小 K 的值。
  4. K变为零时,打印频率为 1 的下一个字符串。

下面是上述方法的实现:

C++
// C++ code for the above approach
 
#include 
using namespace std;
 
// Function to print lexicographically
// smallest Kth string
string KthDistinctString(vector& arr, int K)
{
 
    // Sorting the array of strings
    sort(arr.begin(), arr.end());
 
    // Map to store the strings
    map mp;
    for (auto x : arr) {
        mp[x]++;
    }
 
    for (auto x : mp) {
 
        // Reducing K
        if (x.second == 1) {
            K--;
        }
 
        if (K == 0 and x.second == 1) {
            return x.first;
        }
    }
 
    return "";
}
 
// Driver Code
int main()
{
    vector a
        = { "aa", "aa", "bb", "cc", "dd", "cc" };
    int K = 2;
    cout << KthDistinctString(a, K);
}


Java
// Java code for the above approach
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
 
class GFG {
 
    // Function to print lexicographically
    // smallest Kth string
    static String KthDistinctString(ArrayList arr, int K) {
 
        // Sorting the array of strings
        Collections.sort(arr);
 
        // Map to store the strings
        HashMap mp = new HashMap();
 
        for (String x : arr) {
            int count = 0;
 
            if (mp.containsKey(x)) {
                count = mp.get(x);
            }
            mp.put(x, count + 1);
        }
 
        for (String x : mp.keySet()) {
            // Reducing K
            if (mp.get(x) == 1) {
                K--;
            }
 
            if (K == 0 && mp.get(x) == 1) {
                return x;
            }
        }
 
        return "";
    }
 
    // Driver Code
    public static void main(String args[]) {
        ArrayList a = new ArrayList();
 
        a.add("aa");
        a.add("aa");
        a.add("bb");
        a.add("cc");
        a.add("dd");
        a.add("cc");
 
        int K = 2;
        System.out.println(KthDistinctString(a, K));
    }
}
 
// This code is contributed by gfgking


Python3
# Python3 code for the above approach
 
# Function to print lexicographically
# smallest Kth string
def KthDistinctString(arr, K):
     
    # Sorting the array of strings
    arr.sort()
 
    # Map to store the strings
    mp = {}
    for x in arr:
        if x in mp:
            mp[x] += 1
        else:
            mp[x] = 1
 
    for x in mp:
 
        # Reducing K
        if (mp[x] == 1):
            K -= 1
 
        if (K == 0 and mp[x] == 1):
            return x
 
    return ""
 
# Driver Code
if __name__ == "__main__":
 
    a = [ "aa", "aa", "bb", "cc", "dd", "cc" ]
    K = 2
     
    print(KthDistinctString(a, K))
 
# This code is contributed by rakeshsahni


C#
// C# code for the above approach
using System;
using System.Collections;
using System.Collections.Generic;
 
class GFG
{
   
// Function to print lexicographically
// smallest Kth string
static string KthDistinctString(ArrayList arr, int K)
{
 
    // Sorting the array of strings
    arr.Sort();
 
    // Map to store the strings
    Dictionary mp =
          new Dictionary();
           
    foreach (string x in arr) {
        int count = 0;
         
        if (mp.ContainsKey(x)) {
                count = mp[x];
        }
        mp[x] = count + 1;
    }
 
    foreach (KeyValuePair x in mp) {
        // Reducing K
        if (x.Value == 1) {
            K--;
        }
 
        if (K == 0 && x.Value == 1) {
            return x.Key;
        }
    }
 
    return "";
}
 
// Driver Code
public static void Main()
{
    ArrayList a = new ArrayList();
     
    a.Add("aa");
    a.Add("aa");
    a.Add("bb");
    a.Add("cc");
    a.Add("dd");
    a.Add("cc");
     
    int K = 2;
    Console.Write(KthDistinctString(a, K));
}
}
 
// This code is contributed by Samim Hossain Mondal.


Javascript


输出
dd

时间复杂度: O(NlogN)
辅助空间: O(N)