网站建设百灵鸟,WordPress不能新建页面,郑州做网站zztuotian,温州专业微网站制作电话目录
题目#xff1a;
示例#xff1a;
分析#xff1a;
代码运行结果#xff1a; 题目#xff1a; 示例#xff1a; 分析#xff1a;
题目给我们一个字符串#xff0c;然后字符串中包含星号*#xff0c;要求每个星号消除一个从星号左边起最近的一个字符#xf…目录
题目
示例
分析
代码运行结果 题目 示例 分析
题目给我们一个字符串然后字符串中包含星号*要求每个星号消除一个从星号左边起最近的一个字符返回消除后的字符串。
首先每个星号*要消除从左开始的第一个字符并且自身也被移除这不免让我们想到先进后出后进先出这个概念因此我们自然而然就可以想到使用栈来解决这道题。
一开始我使用的是C内置的stack栈这个容器后由于我们返回的结果还是需要按照正常的顺序排列的字符串而一个个将字符从栈中取出则是相反的顺序如果要正常排列还需要加一道工序因此我们可以使用vector来模拟栈并且取结果的时候也可以从左到右自然地取出。
我们先遍历一边原字符串然后在遇到非星号的字符则直接入栈遇到星号时不仅不入栈还需要将栈顶元素弹出表示星号消除掉了一个从左开始第一个字符。由于题目保证了测试用例可以保证一个星号消除一个字符因此我们不需要判断栈是否为空这种问题不过代码中有习惯性做个判断实际上是可以删掉的 代码运行结果
class Solution {
public:string removeStars(string s) {//使用C自带的stack栈的话,由于栈的先进后出的特殊性,会导致需要单独处理结果的顺序//使用vector模拟stackvectorcharstack;for(char S:s){if(stack.empty()||S!*) stack.push_back(S); //如果栈为空或者元素不为*则入栈//由于题目保证合法操作(即一个*会消除一个字符)因此实际上else if可以改成else,并且上面的if也不需要判断栈是否不为空else if(!stack.empty()) stack.pop_back(); //如果为*,不仅不入栈,并且要弹出一个最后进入的元素}string res;for(const char S:stack){resS;}return res;}
};