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

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 @ 2024-12-02 10:03  王铁柱6  阅读(20)  评论(0)    收藏  举报