📅  最后修改于: 2023-12-03 15:39:27.053000             🧑  作者: Mango
很多情况下,我们需要判断一个字符串中是否包含重复的字符。本篇介绍如何使用 JavaScript 来实现带有重复字符的字符串处理。
暴力枚举法是一种朴素的方法,对于每个字符,我们都遍历一遍整个字符串,看看是否有与其相同的字符。
function hasDuplicate(str) {
for(let i = 0; i < str.length; i++) {
for(let j = 0; j < str.length; j++) {
if(i !== j && str[i] === str[j]) {
return true;
}
}
}
return false;
}
该方法的时间复杂度为 O(n^2),效率低下。
我们可以使用哈希表来解决字符串中是否包含重复字符的问题。哈希表是一种根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。
function hasDuplicate(str) {
const map = new Map();
for(let i = 0; i < str.length; i++) {
if(map.has(str[i])) {
return true;
}
map.set(str[i], true);
}
return false;
}
该方法使用了 Map 数据结构,时间复杂度为 O(n),效率较高。
如果允许修改字符串,我们可以先将字符串排序,然后再判断其中是否有相邻元素相同的情况。
function hasDuplicate(str) {
str = str.split('').sort().join('');
for(let i = 1; i < str.length; i++) {
if(str[i] === str[i-1]) {
return true;
}
}
return false;
}
该方法的时间复杂度为 O(nlogn)。
以上三种方法分别是暴力枚举法、哈希表和排序法。如果不需要修改字符串,建议使用哈希表;如果可以修改字符串,则使用排序法会更加高效。