每日一题——删除字符串中的所有相邻重复项

简介: 每日一题——删除字符串中的所有相邻重复项

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

题目链接

思路

  • 这是一道用解决的典型题目
  • 我们先来看看栈的基本性质:
  • 栈:是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素的操作。进行数据插入和删除操作的一端称为栈顶,另一端为栈底
  • 栈中的数据元素遵守后进先出原则
  • 压栈:栈的插入操作称为进栈/压栈/入栈,其位置在栈顶
  • 出栈:栈的删除操作称为出栈,其位置也在栈顶

  • 这题其实和有效括号序列类似,都是对字符进行匹配,如果匹配成功那就进行删除
  • 而这题匹配成功的条件就是相邻的两个字符是相等的,那么我们就可以用一个循环,来遍历整个字符串,然后再将每次遍历的字符和前一个字符进行比较,如果相等就删除。
  • 那么,我们怎么保存遍历字符的前面一个元素呢?就是用的栈
  • 遍历字符串,如果栈为空或遍历的字符与前面的不相等,那就将这个字符入栈
  • 否则,如果与前面的字符(栈顶元素)相等,那就将栈顶元素出栈(即相当于匹配成功,将这两个字符删除)
  • 我们以字符串“abbaca”为例,看一下完整的过程:

实现代码

char * removeDuplicates(char * s){
    int len = strlen(s);
    char* stack = (char *)malloc(sizeof(char) * (len + 1)); //申请返回的字符串的内存
    int top = 0;  //栈顶指针置零
    for(int i = 0; i < len; i++)
    {
        //如果栈不为空或遍历元素等于栈顶元素,出栈
        if(top > 0 && s[i] == stack[top - 1])
            top--;
        //否则,入栈
        else
            stack[top++] = s[i];
    }
    stack[top] = 0; //确定新字符串结束位置
    return stack; //返回新的字符串
}


相关文章
|
8月前
|
Java C++ Python
leetcode-1047:删除字符串中的所有相邻重复项
leetcode-1047:删除字符串中的所有相邻重复项
48 0
|
存储 算法 前端开发
前端算法-删除字符串中的所有相邻重复项
前端算法-删除字符串中的所有相邻重复项
|
3月前
【LeetCode-每日一题】 删除排序数组中的重复项
【LeetCode-每日一题】 删除排序数组中的重复项
27 4
09_删除字符串中的所有相邻重复项
09_删除字符串中的所有相邻重复项
|
8月前
|
存储 Java 索引
删除字符串中的所有相邻重复项
删除字符串中的所有相邻重复项
|
8月前
leetcode代码记录(删除字符串中的所有相邻重复项
leetcode代码记录(删除字符串中的所有相邻重复项
43 0
|
8月前
每日一题——删除有序数组中的重复项
每日一题——删除有序数组中的重复项
【Leetcode -844.比较含退格的字符串 -1047.删除字符串中的所有相邻重复项】
【Leetcode -844.比较含退格的字符串 -1047.删除字符串中的所有相邻重复项】
58 0
⌈力扣⌋删除字符串中的所有相邻重复项
⌈力扣⌋删除字符串中的所有相邻重复项
55 0
|
算法
LeetCode每日1题--删除字符串中的所有相邻重复项
LeetCode每日1题--删除字符串中的所有相邻重复项
78 0