文章目录
- 1.题目
- [844. 比较含退格的字符串](https://leetcode.cn/problems/backspace-string-compare/description/)
- 2.思路
- 3.代码
1.题目
844. 比较含退格的字符串
给定 s
和 t
两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true
。#
代表退格字符。
**注意:**如果对空文本输入退格字符,文本继续为空。
示例 1:
**输入:**s = "ab#c", t = "ad#c"
**输出:**true
**解释:**s 和 t 都会变成 "ac"。
示例 2:
**输入:**s = "ab##", t = "c#d#"
**输出:**true
**解释:**s 和 t 都会变成 ""。
示例 3:
**输入:**s = "a#c", t = "b"
**输出:**false
**解释:**s 会变成 "c",但 t 仍然是 "b"。
2.思路
模拟栈
3.代码
class Solution {
public:// 该函数用于比较两个字符串在经过退格处理后是否相等bool backspaceCompare(string s, string t) {// 创建两个栈,分别用于处理字符串 s 和 tstack<char> stack1;stack<char> stack2;// 处理字符串 sfor (int i = 0; i < s.size(); ++i) {// 如果当前字符不是退格符 '#'if (s[i] != '#') {// 将该字符压入栈 stack1 中stack1.push(s[i]);} else {// 如果当前字符是退格符 '#'if (stack1.empty()) {// 若栈为空,说明没有字符可退格,直接跳过本次循环continue;} else {// 若栈不为空,弹出栈顶字符,表示进行退格操作stack1.pop();}}}// 处理字符串 tfor (int i = 0; i < t.size(); ++i) {// 如果当前字符不是退格符 '#'if (t[i] != '#') {// 将该字符压入栈 stack2 中stack2.push(t[i]);} else {// 如果当前字符是退格符 '#'if (stack2.empty()) {// 若栈为空,说明没有字符可退格,直接跳过本次循环continue;} else {// 若栈不为空,弹出栈顶字符,表示进行退格操作stack2.pop();}}}// 将栈 stack1 中的字符依次取出,拼接成字符串 s1string s1 = "";while (!stack1.empty()) {s1 += stack1.top();stack1.pop();}// 将栈 stack2 中的字符依次取出,拼接成字符串 s2string s2 = "";while (!stack2.empty()) {s2 += stack2.top();stack2.pop();}// 比较处理后的两个字符串是否相等if (s1 == s2) {return true;}return false;}
};