2053. 数组中第 K 个独一无二的字符串
生活随笔
收集整理的這篇文章主要介紹了
2053. 数组中第 K 个独一无二的字符串
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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]?只包含小寫英文字母。
解題思路
使用map維護字符串以及其在數組中出現次數的關系,再次遍歷數組,找出只出現一次的字符串,并且找出第k個出現次數為1次的字符串,如果出現次數小于1的字符串的個數小于k,則返回一個空串。
代碼
class Solution { public:string kthDistinct(vector<string>& arr, int k) {map<string,int> m;for (int i = 0; i < arr.size(); ++i) {m[arr[i]]++;}for (int i = 0; i < arr.size(); ++i) {if (m[arr[i]]==1&&--k==0)return arr[i];}return "";} };-
時間復雜度:O(∑ini)O(\sum_i n_i)O(∑i?ni?),即數組 arr\textit{arr}arr 中字符串長度總和,其中 nin_ini?為字符串 arr[i]\textit{arr}[i]arr[i] 的長度。即為維護頻數哈希表和尋找第 k 個獨一無二的字符串的時間復雜度。
-
空間復雜度:O(∑ini)O(\sum_i n_i)O(∑i?ni?),即為哈希集合的空間開銷。
總結
以上是生活随笔為你收集整理的2053. 数组中第 K 个独一无二的字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 女人梦到一只大老鼠什么预兆
- 下一篇: 梦到打骂女儿啥意思