2053. 数组中第 K 个独一无二的字符串

97 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第37天,点击查看活动详情

题目 leetcode.cn/

  • 独一无二的字符串 指的是在一个数组中只出现过 一次 的字符串。
  • 给你一个字符串数组 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] 只包含小写英文字母。

代码

function kthDistinct(arr: string[], k: number): string {
    let str = [];
    for(let i = 0; i < arr.length; i++){
        if(arr.indexOf(arr[i]) === arr.lastIndexOf(arr[i])){
            str.push(arr[i]);
        }
    }
    return str.length >= k ? str[k - 1] : '';
};
  • 挨个取出独一无二字符串:
    • 首先定义一个保存独一无二字符串的数组变量
    • 遍历字符串数组,使用indexOflasIndexOf返回下标的方式,判断两个下标是否相等,如果相等,则说明当前字符串是在数组中出现的唯一一次的字符串,将其添加到数组变量中】
    • 最后统计保存独一无二字符串数组的长度,如果个数大于等于给定的k值,就返回当前数组下标为k - 1的值(数组下标从0开始,k从1开始),如果小于,则说明没有符合的值,返回空字符串
function kthDistinct(arr: string[], k: number): string {
    let sum = 0;
    for(let i = 0; i < arr.length; i++){
        if(arr.indexOf(arr[i]) === arr.lastIndexOf(arr[i])){
            sum++;
            if(sum === k){
                return arr[i];
            }
        }
    }
    return ''
};
  • 计数统计:
    • 定义一个计数器,用来判断当前的独一无二字符串是数组中的第几个独一无二的字符串
    • 遍历数组,判断当前项是否是独一无二的字符串
    • 如果是,则计数器+1,再判断计数器是否和给定的k值相等,如果相等则返回当前项
    • 如果遍历完没有符合的项,则返回空字符串