📜  带有重复字符的 js 刽子手 - Javascript (1)

📅  最后修改于: 2023-12-03 15:39:27.053000             🧑  作者: Mango

带有重复字符的 JS 列子手

很多情况下,我们需要判断一个字符串中是否包含重复的字符。本篇介绍如何使用 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)。

总结

以上三种方法分别是暴力枚举法、哈希表和排序法。如果不需要修改字符串,建议使用哈希表;如果可以修改字符串,则使用排序法会更加高效。