JavaScript删除相邻的重复字母[重复]

Posted

技术标签:

【中文标题】JavaScript删除相邻的重复字母[重复]【英文标题】:JavaScript remove adjacent duplicate letters [duplicate] 【发布时间】:2021-07-03 21:13:12 【问题描述】:

我见过一些这样的例子,但它们要么不在 JS 中,要么效率极低(就像我现在的解决方案一样)。基本上我想要做的是一个函数,它接受一个字符串并删除任何相邻且相同的字符。例如,“jjjavvvaaassscript”会变成“javascript”。我不想要的是它会变成“javscript”(消除第二个“a”)。我确实有一个如下所示的工作功能,但这绝对是可怕的,我正在寻找一种更好的方法来做到这一点。

function removeChar(text, index) 
    return(text.slice(0,index)+text.slice(index+1));


function removeDuplicates(text) 
    var prevChar = "";
    var finalT = text;
    var i = 0;
    for(i = 0; i < text.length; i++) 
        if(finalT.charAt(i) == prevChar) 
            if(i > finalT.length) 
                return finalT;
             else 
                finalT = removeChar(finalT, i);
                i--;
            
         else 
            prevChar = finalT.charAt(i);
        
    
    return finalT;

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

我会使用正则表达式来匹配一个字符,然后尽可能多次地反向引用它(例如,它将匹配jjj,或a,或vvv,等等),然后用一个字符替换:

const removeDuplicates = str => str.replace(/(.)\1*/g, '$1');
console.log(removeDuplicates('jjjavvvaaassscript'));

如果您必须手动迭代更多,类似于您当前的方法,那么:

const removeDuplicates = str => 
  let lastChar = str[0];
  let finalT = str[0];
  for (const char of str.slice(1)) 
    if (lastChar !== char) finalT += char;
    lastChar = char;
  
  return finalT;
;
console.log(removeDuplicates('jjjavvvaaassscript'));

【讨论】:

也许\1+ 会更好,因为您不需要替换没有重复的字符

以上是关于JavaScript删除相邻的重复字母[重复]的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题(160)~删除字符串中的所有相邻重复项

Leetcode 1047 删除字符串中的所有相邻重复项

⌈力扣⌋删除字符串中的所有相邻重复项

LeetCode.1047-重复删除字符串中的所有相邻重复项

Python编程题35--删除字符串中的所有相邻重复项

《LeetCode之每日一题》:73.删除字符串中的所有相邻重复项