这是一个非常常见的面试问题:
这是一个全英语句子,只包含一个重复的单词,例如:
输入字符串:today is a good day is true
输出:is
我有个主意:
读取字符串中的每个字符,使用一些散列函数计算散列值,直到获得空格(''),然后将该散列值放入散列表中。
重复步骤1直到字符串结尾,如果有重复的哈希值,则返回该字词,否则返回null
。
这有用吗?
答案 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 */