【题解】NowCoder AB5 点击消除

简介: 【题解】NowCoder AB5 点击消除

题目来源:牛客

AB5 点击消除

题目描述:

牛牛拿到了一个字符串。

他每次“点击”,可以把字符串中相邻两个相同字母消除,例如,字符串"abbc"点击后可以生成"ac"。

但相同而不相邻、不相同的相邻字母都是不可以被消除的。

牛牛想把字符串变得尽可能短。他想知道,当他点击了足够多次之后,字符串的最终形态是什么?

输入描述:

一个字符串,仅由小写字母组成。(字符串长度不大于300000)

输出描述:

一个字符串,为“点击消除”后的最终形态。若最终的字符串为空串,则输出0。

示例1

输入: abbc

输出: ac

示例2

输入: abba

输出: 0

示例3

输入: bbbbb

输出: b

解析

本题跟括号匹配题简直一个模子里刻出来的,很容易联想到栈。没错,这题就是使用栈的特性来解决问题,两两相同的元素进行消除。在元素入栈的时候跟栈顶元素比较一下,相同的话说明能匹配上,则该元素不入栈,并且弹出栈顶元素,不相同就正常入栈。

不过注意的是,最后将栈内所有元素提取的时候,是跟答案相反的,所以没必要一定使用栈,用其他的模拟栈即可,例如 vectorstring

代码实现

#include<iostream>
// 使用string需要导入此头文件
#include<string>
using namespace std;
int main()
{
    string input;
    string ans;
    cin >> input;
    // 遍历输入的字符串
    for (auto e : input)
    {
      // 只有当我们的答案字符串非空,并且与下一个值匹配上了才能进行’消除‘
        if (ans.size() && e == ans.back())
        {
          // 弹出消除的字符串
            ans.pop_back();
        }
        // 没匹配上就入栈
        else
        {
            ans.push_back(e);
        }
    }
    // 注意,字符串为空时题目要求返回 “0”
    cout << (ans.size() ? ans : "0");
    return 0;
}
目录
相关文章
|
4月前
【牛客网】BC51 三角形判断
【牛客网】BC51 三角形判断
29 0
|
11月前
|
算法 程序员
【Leetcode】NC31 第一个只出现一次的字符(牛客网)、面试题 01.01. 判定字符是否唯一
题目描述: 描述 在一个长为n字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
62 0
|
定位技术
【CCCC】L3-007 天梯地图 (30分),两次Dijkstra+路径打印(数据点2,4错因),90行最短题解
【CCCC】L3-007 天梯地图 (30分),两次Dijkstra+路径打印(数据点2,4错因),90行最短题解
170 0
|
3月前
|
算法
【经典LeetCode算法题目专栏分类】【第3期】回溯问题系列:单词搜索、N皇后问题、判断有效数独、解数独
【经典LeetCode算法题目专栏分类】【第3期】回溯问题系列:单词搜索、N皇后问题、判断有效数独、解数独
|
3月前
|
算法
算法特训,AB5 .点击消除BC.149简写单词牛客.除2!牛客.Fibonacci数列
算法特训,AB5 .点击消除BC.149简写单词牛客.除2!牛客.Fibonacci数列
|
4月前
|
存储 算法 Java
【牛客-算法】NC57 反转数字
题目描述 原题:NC57 反转数字 描述 给定一个32位的有符号整数num,将num中的数字部分反转,最后返回反转的结果 1.只反转数字部分,符号位部分不反转
42 0
每日一题---蓝桥练习“字符串合并”
每日一题---蓝桥练习“字符串合并”
|
算法
【Day19】LeetCode算法刷题(附带解题思路、代码注释详细) 【777. 在LR字符串中交换相邻字符】 【54. 螺旋矩阵】
学习了解附带解题思路、代码注释详细) 【777. 在LR字符串中交换相邻字符】 【54. 螺旋矩阵】。
109 0
【Day19】LeetCode算法刷题(附带解题思路、代码注释详细) 【777. 在LR字符串中交换相邻字符】 【54. 螺旋矩阵】