哪个算法可以找到字符串中唯一的一个重复字?

时间:2014-12-15 11:11:04

标签: string algorithm

这是一个非常常见的面试问题:

这是一个全英语句子,只包含一个重复的单词,例如:

输入字符串:today is a good day is true

输出:is

我有个主意:

  1. 读取字符串中的每个字符,使用一些散列函数计算散列值,直到获得空格(''),然后将该散列值放入散列表中。

  2. 重复步骤1直到字符串结尾,如果有重复的哈希值,则返回该字词,否则返回null

  3. 这有用吗?

3 个答案:

答案 0 :(得分:2)

你的方法是合理的(实际上我能想到的最好)。仍然考虑到可能出现碰撞的事实。即使哈希值相同,也要比较单词。

答案 1 :(得分:0)

它可以工作,但你可以让你的生活更轻松。

您是否使用特定的编程语言?

如果你用c#编码,我建议你使用 String.Split函数(并用“”分隔)将您的句子转换为单词列表。然后,您可以使用LINQ(请参阅How to get duplicate items from a list using LINQ?)或遍历列表轻松查找重复项。

答案 2 :(得分:0)

您可以使用Map()功能,并返回在字符串中找到重复单词的次数。

var a = 'sometimes I feel clever and sometimes not';

var findDuplicateWord = a => {
  var map = new Map();
  a = a.split(' ');

  a.forEach(e => {
    if (map.has(e)) {
      let count = map.get(e);
      map.set(e, count + 1);
    } else {
      map.set(e, 1);
    }
  });

  let dupe = [];
  let hasDupe = false;
  map.forEach((value, key) => {
    if (value > 1) {
      hasDupe = true;
      dupe.push(key, value);
    }
  });
  console.log(dupe);
  return hasDupe;
};

findDuplicateWord(a);

//output
/* Native Browser JavaScript  
[ 'sometimes', 2 ]
=> true */