首页 > 解决方案 > 解决这个面试问题:信汤(JS)

问题描述

这是一个我还无法解决的面试问题......我有这个矩阵:

[
 ['A', 'B', 'R'],
 ['H', 'A', 'H'],
 ['A', 'P', 'R'],
 ['P', 'L', 'A'],
 ['G', 'E', 'F']
]

我需要找到“APPLE”这个词,但我可以选择的字母必须尽可能接近,在这种情况下: (2;0) (2;1) (3;0) (3;1) (4; 1)

我必须找到单词并返回其字符的坐标

使用 Javascript 你是如何做到的?

我试过这个:

const soup = [
 ['A', 'B', 'R'],
 ['H', 'A', 'H'],
 ['A', 'P', 'R'],
 ['P', 'L', 'A'],
 ['G', 'E', 'F']
];

const word = 'APPLE';
const letters = word.split('');
let hashTable = {};

for (let letter of letters) {
  for (let line = 0; line < soup.length; line++) {
    for (let i = 0; i < soup[line].length; i++ ) {
      console.log(soup[line][i]);
      if (letter === soup[line][i]) {
       hashTable[letter] = [line, i];
      }
    }
  }
}

console.log(hashTable);

标签: javascriptalgorithm

解决方案


您可以使用矩阵行和列作为键,并使用字母表作为值。在您的情况下,您将 p 两次存储在同一个对象中。所以我们不能在下面的代码中复制对象中的键供您参考

const soup = [
  ["A", "B", "R"],
  ["H", "A", "H"],
  ["A", "P", "R"],
  ["P", "L", "A"],
  ["G", "E", "F"]
];

const word = "APPLE";
let index = 0;
let hashTable = {};

for (let line = 0; line < soup.length; line++) {
  for (let i = 0; i < soup[line].length; i++) {
    if (word[index] === soup[line][i] && index < word.length) {
      const col = i + 1;
      const row =  line + 1
      const key = row + "," + col;
      hashTable[key] = soup[line][i];
      index++;
    }
  }
}

console.log(hashTable);


推荐阅读