Skip to content
On this page

599. 两个列表的最小索引总和

原题链接:LeetCode 599. 两个列表的最小索引总和

题目描述

给定两个字符串数组 list1list2,找到 索引和最小的公共字符串

公共字符串 是同时出现在 list1list2 中的字符串。

具有 最小索引和的公共字符串 是指,如果它在 list1[i]list2[j] 中出现,那么 i + j 应该是所有其他 公共字符串 中的最小值。

返回所有 具有最小索引和的公共字符串。以 任何顺序 返回答案。

示例 1:

**输入: **list1 = ["Shogun", "Tapioca Express", "Burger King", "KFC"],list2 = ["Piatti", "The Grill at Torrey Pines", "Hungry Hunter Steakhouse", "Shogun"] 输出: ["Shogun"] 解释: 唯一的公共字符串是 “Shogun”。

示例 2:

**输入:**list1 = ["Shogun", "Tapioca Express", "Burger King", "KFC"],list2 = ["KFC", "Shogun", "Burger King"] 输出: ["Shogun"] 解释: 具有最小索引和的公共字符串是 “Shogun”,它有最小的索引和 = (0 + 1) = 1。

示例 3:

**输入:**list1 = ["happy","sad","good"], list2 = ["sad","happy","good"] 输出:["sad","happy"] 解释:有三个公共字符串: "happy" 索引和 = (0 + 1) = 1. "sad" 索引和 = (1 + 0) = 1. "good" 索引和 = (2 + 2) = 4. 最小索引和的字符串是 "sad" 和 "happy"。

提示:

- `1 <= list1.length, list2.length <= 1000`

- `1 <= list1[i].length, list2[i].length <= 30` 

`list1[i]` 和 `list2[i]` 由空格 `' '` 和英文字母组成。
- `list1` 的所有字符串都是 **唯一** 的。

- `list2` 中的所有字符串都是 **唯一** 的。

难度: Easy


题解代码

javascript
/**
 * @param {string[]} list1
 * @param {string[]} list2
 * @return {string[]}
 */
var findRestaurant = function(list1, list2) {
  let res = [], min = Infinity
  const hash = {}

  for (let i = 0; i < list1.length; i++) {
    hash[list1[i]] = i
  }

  for (let i = 0; i < list2.length; i++) {
    if (list2[i] in hash) {
      if (i + hash[list2[i]] < min) {
        min = i + hash[list2[i]]
        res = [list2[i]]
      } else if (i + hash[list2[i]] === min) {
        res.push(list2[i])
      }
    }
  }

  return res
};

技术文档集合