首页 > 其他分享 >【数据结构-邻项消除】力扣1047. 删除字符串中的所有相邻重复项

【数据结构-邻项消除】力扣1047. 删除字符串中的所有相邻重复项

时间:2024-11-01 23:48:37浏览次数:3  
标签:1047 string 删除 重复 邻项 back st 力扣 字符串

给出由小写字母组成的字符串 s,重复项删除操作会选择两个相邻且相同的字母,并删除它们。

在 s 上反复执行重复项删除操作,直到无法继续删除。

在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

示例:
输入:“abbaca”
输出:“ca”
解释:
例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 “aaca”,其中又只有 “aa” 可以执行重复项删除操作,所以最后的字符串为 “ca”。
在这里插入图片描述

模拟栈

class Solution {
public:
    string removeDuplicates(string s) {
        string st;
        for(char c : s){
            if(!st.empty() && st.back() == c){
                st.pop_back();
            }
            else{
                st.push_back(c);
            }
        }
        return st;
    }
};

时间复杂度:O(n),其中 n 是字符串的长度。我们只需要遍历该字符串一次。

空间复杂度:O(n) 或 O(1),取决于使用的语言提供的字符串类是否提供了类似「入栈」和「出栈」的接口。注意返回值不计入空间复杂度。

我们可以采用模拟栈的方法,如果栈顶元素和要推入的元素相同,则不推入元素且弹出栈顶元素。如果不相同,则推入元素到栈顶。最后返回模拟栈的字符串st即可。

标签:1047,string,删除,重复,邻项,back,st,力扣,字符串
From: https://blog.csdn.net/sjsjs11/article/details/143310171

相关文章

  • 力扣题目解析--Z字形变换
    题目将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z字形排列。比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:PAHNAPLSIIGYIR之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYI......
  • 力扣面试题 _ 1393
    .-力扣(LeetCode)1.目标        编写解决方案报告每只股票的 资本损益。        股票的 资本利得/损失 是指一次或多次买卖该股票后的总收益或损失。        以 任意顺序 返回结果表。2.分析3.实现selectstock_name,sum(cas......
  • SQL,力扣题目1783,大满贯数量
    一、力扣链接1783.大满贯数量二、题目描述表:Players+----------------+---------+|ColumnName|Type|+----------------+---------+|player_id|int||player_name|varchar|+----------------+---------+player_id是这个表的主键(具有......
  • SQL,力扣题目1747,应该被禁止的 Leetflex 账户
    一、力扣链接LeetCode_1747二、题目描述表: LogInfo+-------------+----------+|ColumnName|Type|+-------------+----------+|account_id|int||ip_address|int||login|datetime||logout|datetime|+-------------......
  • SQL,力扣题目1699,两人之间的通话次数
    一、力扣链接LeetCode_1699二、题目描述表: Calls+-------------+---------+|ColumnName|Type|+-------------+---------+|from_id|int||to_id|int||duration|int|+-------------+---------+该表没有主键(具有唯一值......
  • 力扣-Mysql-1369-获取最近第二次的活动(困难)
    一、题目来源 1369.获取最近第二次的活动-力扣(LeetCode)二、数据表结构表: UserActivity+---------------+---------+|ColumnName|Type|+---------------+---------+|username|varchar||activity|varchar||startDate|Date......
  • 【力扣】GO解决子序列相关问题
    文章目录一、引言二、动态规划方法论深度提炼子序列问题的通用解法模式三、通用方法论应用示例:最长递增子序列(LeetCode题目300)Go语言代码实现四、最长连续递增序列(LeetCode题目674)Go语言代码实现五、最长重复子数组(LeetCode题目718)Go语言代码实现六、最长公共子序......
  • 力扣前1500道非会员题刷题笔记
    Problem:1.两数之和思路首先定义一个unordered_map<int,int>heap,用来记录数组nums中对应的数的下标然后在一个for循环里遍历nums数组用r记录target与当前数组的值的差值,再从当前数的前面找有没有这个差值,也就是heap.count(r),如果有则返回{heap[r],i},如果没有就把当......
  • java算法:力扣动态规划公式和例子,套这个就够了!
    持续更新…(跟着代码随想录总结的)使用场景:只要数值无限依赖于前面的数值就可以套用这个公式五步法dp数组及下标的含义递推公式dp数组如何初始化遍历顺序打印dp数组经典举例:斐波那契数斐波那契数是:一个数组得的某个数字等于前两个数字之和dp[i]dp[i][j]......
  • 力扣每日一题3181.执行操作可获得的最大总奖励2
      题目描述:给你一个整数数组 rewardValues,长度为 n,代表奖励的值。最初,你的总奖励 x 为0,所有下标都是 未标记 的。你可以执行以下操作 任意次 :从区间 [0,n-1] 中选择一个 未标记 的下标 i。如果 rewardValues[i] 大于 你当前的总奖励 x,则将 rewardVa......