首页 > 其他分享 >写一个方法删除字符串中所有相邻重复的项

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

时间:2024-12-02 10:13:40浏览次数:4  
标签:removeAdjacentDuplicatesEfficient console log 删除 相邻 result str 字符串 Output

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.

标签:removeAdjacentDuplicatesEfficient,console,log,删除,相邻,result,str,字符串,Output
From: https://www.cnblogs.com/ai888/p/18581093

相关文章

  • 多个字符串的存储
    输入:7Bob35Amy28James98Alice11Jack45Smith33Chris62代码:#include<stdio.h>intmain(){intn,sum=0,apprmax=0,appri;scanf("%d",&n);char*name[10000]={0};//错误intnum[10000]={0};for(inti=0;i<n;i++......
  • 微信好友检测工具 批量检测找出微信删除或拉黑了自己的好友
    大小姐李TT「真实好友」主要功能就是检测WX好友对方是否把你删除了。利用了微信自带规则来验证对方是否为好友:双方是微信好友,可以转账;双方不是微信好友,不能转账。目前作者更新到了5.0内测版,新增版本支持,批量备注异常好友。微信好友检测工具下载地址:https://pan.baidu.com......
  • LeetCode题练习与总结:找到字符串中所有字母异位词--438
    一、题目描述给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。示例 1:输入:s="cbaebabacd",p="abc"输出:[0,6]解释:起始索引等于0的子串是"cba",它是"abc"的异位词。起始索引等于6的子......
  • C/C++ 删除字符串中重复的字符并排序算法详解及源码
    删除重复字符算法详解及代码思路创建一个数组,默认所有元素都是0;遍历字符串的每个字符;判断当前字符是否已经出现过,如果没有出现过,则将数组中对应位置设为0,如果当前字符已经出现过,则将数组中对应位置设为1;遍历数组把值为0对应位置的字符加入到结果字符串中;返回结果字符串。代......
  • 删除字符串(新)(java)
    【问题描述】编写程序将一个指定文件中给定字符串删除。假设给定的字符串长度不超过20,文件中每行的字符数不超过100。要求:给定的字符串大小写无关。【输入形式】给定文件名为filein.txt。从标准输入中输入要删除的字符串(不含空格)。【输出形式】将删除后的结果输出到文件fi......
  • C++字符串函数
    两种字符串定义(C++):字符串变量字符数组定义stringstr;charstr[100];求长度str.length();/str.size();strlen(str);输入字符串getline(cin,str);可以读入一行字符串,可以包含空格,遇到回车结束/cin>>str;可以读入一连串的字符,遇到空格or回车结束/scanf("%s",&......
  • 1201-字符串编码
    最小栈leetcode394.题目大意:[]前的数字为出现的次数,中的内容会要重复的数据,例如输入:s="3[a2[c]]"输出:"accaccacc"解题思路:主要难点为嵌套中括号,利用栈的特点设计两个LinkedList存储次数和重复值,每次遇到左括号的时候将当前的数字和重复值分别入栈,遇到右括号的时候将数......
  • 字符串比较内容、模拟用户登录案例
    1.equals、equalsIgnoreCase在之前我们使用“==”比较的是字符串的地址,但是地址对于我们来说没有用,我们要比较的是字符串的内容。而equals和equalsIgnoreCase就是用于比较字符串的内容的两种方法1.equals比较两个对象的内容是否一致,如果一致则为true,否则为false调用方式:直接......
  • P11361 [NOIP2024] 编辑字符串
    题目大意详细题目传送门两个\(01\)串,可以对两个串中任意相邻的字符进行交换,没有代价可以进行任意多次。可是两个串有的位置的字符是定死的,无法被交换,求任意次操作后最多让两个串的多少个位置\(01\)相等。即\(\sum[a_i=b_i]\)。\(n\leq10^5\)思路首先根据冒泡排序的性......
  • 洛谷P11361 [NOIP2024] 编辑字符串
    ProblemSolve首先任意更换相邻元素任意次等同于在可交换范围内随便移动这题是求最优解,直观想到DP和贪心,但是容易反应过来本题DP的话很难做到无后效性,且状态较多,故尝试贪心不难发现,我们从左往右遍历的某个时刻进行交换后所得到的局部最优解总是答案的一种方案的一部分原因......