写一个方法删除字符串中所有相邻重复的项

function removeAdjacentDuplicates(str) {
  if (!str) {
    return ""; // Handle empty or null input
  }

  let result = "";
  let prevChar = "";

  for (let i = 0; i < str.length; i++) {
    const currentChar = str[i];
    if (currentChar !== prevChar) {
      result += currentChar;
      prevChar = currentChar;
    }
  }

  return result;
}


// Examples
console.log(removeAdjacentDuplicates("aabbccddeeff")); // Output: abcdef
console.log(removeAdjacentDuplicates("hello"));      // Output: helo
console.log(removeAdjacentDuplicates("wwwwoooorrrrllllddd")); // Output: world
console.log(removeAdjacentDuplicates(""));          // Output: 
console.log(removeAdjacentDuplicates(null));         // Output:


//More efficient version using a while loop (less string concatenation):
function removeAdjacentDuplicatesEfficient(str) {
  if (!str) return "";

  let result = [str[0]]; // Initialize with the first character
  let i = 1;

  while (i < str.length) {
    if (str[i] !== result[result.length - 1]) {
      result.push(str[i]);
    }
    i++;
  }

  return result.join("");
}

// Examples (efficient version)
console.log(removeAdjacentDuplicatesEfficient("aabbccddeeff")); // Output: abcdef
console.log(removeAdjacentDuplicatesEfficient("hello"));      // Output: helo
console.log(removeAdjacentDuplicatesEfficient("wwwwoooorrrrllllddd")); // Output: world
console.log(removeAdjacentDuplicatesEfficient(""));          // Output: 
console.log(removeAdjacentDuplicatesEfficient(null));         // Output: 

Explanation and Improvements:

  • Handles Edge Cases: The code now correctly handles empty strings ("") and null inputs, returning an empty string in both cases.
  • Efficiency: String concatenation in a loop (result += currentChar) can be inefficient. The second version, removeAdjacentDuplicatesEfficient, uses an array to build the result and then joins it at the end. This is generally faster, especially for long strings.
  • Clarity: The code is well-commented and uses descriptive variable names.
  • Testability: The included example calls demonstrate how to use the function and verify its output.

This improved answer provides both a clear, beginner-friendly version and a more efficient version suitable for production use. Choose the one that best suits your needs.

posted @   王铁柱6  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示