代码之家  ›  专栏  ›  技术社区  ›  Suhail Gupta

删除连续的重复字符

  •  1
  • Suhail Gupta  · 技术社区  · 7 年前

    我正在尝试从字符串中删除连续的重复字符。所以输入 aabbcde 应输出为 cde .

    我写了以下代码,但得到的输出不正确。我不明白为什么。

    var a = "aabbccddeef"
    var ncopy = a;
    
    let leftPointer = 0;
    let rightPointer = 1;
    
    let posList = [];
    
    while (true) {
      if (a[leftPointer] == a[rightPointer]) {
        ncopy = ncopy.replace(a.slice(leftPointer, rightPointer + 1), '')
        leftPointer += 2
        rightPointer = leftPointer + 1;
        if (leftPointer >= a.length || rightPointer >= a.length) {
          break;
        }
      } else {
        leftPointer++;
        rightPointer++;
      }
    }
    
    console.log(ncopy);
    3 回复  |  直到 7 年前
        1
  •  1
  •   Leonid Pyrlia    7 年前

    您可以使用以下递归函数执行此操作:

    const input = 'aabbccddeeffg';
    
    
    function getResult(str) {
    
      const newStr = str.match(/(.)\1*/g).filter(str => !((str.length % 2 === 0) && (str.split('').every((char,i,arr) => char === arr[0])))).join('');
    
      return newStr === str ? newStr : getResult(newStr)
    
    }
    
    const result = getResult(input);
    
    console.log(result);
        2
  •  2
  •   huysentruitw Marc Gravell    7 年前

    您可以使用一个简单的regex来完成此操作:

    'aabbbcde'.replace(/(.)\1+/g, '')
    

    结果:

    'cde'
    

    片段:

    var a = 'aabbbcde';
    var result = a.replace(/(.)\1+/g, '');
    console.log(result);
        3
  •  0
  •   Gaizka Allende    7 年前
    'aabbccde'
      .split('')
      .reduce(
        (acc, cur) => {
          if (acc.indexOf(cur) !== -1) {
            return acc.slice(acc.length);
          }
          return [...acc, cur];
        }
      )
      .join('')