字符串消消乐?
给定一个字符串,删除相邻两个相同的字符。
例如:
给定: “abbabc”
输出:“bc"
思路:
1、乍一看,是不是应该挨个便利,每次遍历消去原始就两两相邻的,在第二遍来消除剩下的,直到没有相同的,咋直到消除完了?直接看某一次长度不在变化,可能来个flag 辅助判断。会遍历几次?两两相消,那么最多字符串的一半那么多次。
2、想一想,其实遍历那么多次是不是不需要的,每次找到相邻的以后,直接消除,消除后下一个和之前没有消除的比较,看相同不,直到到达字符串结尾。刚好栈就可以完成这一任务
注意点:
1、栈空不能再取top() 所以取之前要判空,由于c++多个条件时候,条件从左向右,那么只需要把判空放在前面就好。
2、最后拼结果的时候,直接用库函数insert, 不用挨个加再转置了。
代码:
std::string delete_duplicated(std::string input_demo) {
if (input_demo.size() < 1)
return input_demo;
std::stack<char> tmp;
tmp.push(input_demo[0]);
for (int i = 1; i < input_demo.size(); ++i) {
if (!tmp.empty() && input_demo[i] == tmp.top())
tmp.pop();
else
tmp.push(input_demo[i]);
}
std::string result = "";
while (!tmp.empty()) {
result.insert(result.begin(),tmp.top());
tmp.pop();
}
return result;
}