844 compare strings having backspace
·data-structure-and-algorithm
#string
844.比较含退格的字符串
错误代码1:
class Solution {
public:
bool backspaceCompare(string s, string t)
{
int slow = 0;
int str_size = 0;
if (size(s) < size(t))
{
str_size = size(t);
}
else
{
str_size = size(s);
}
for (int fast = 0; fast < str_size; fast++)
{
if (s[fast] == '#')
{
s[fast] = s[fast - 1] = 0; //错误的删除方式,且可能造成访问越界
}
else
{
s[slow] = s[fast];
}
if (t[fast] == '#')
{
t[fast] = t[fast - 1] = 0;
}
else
{
t[slow] = t[fast];
}
slow++;
}
if (s == t)
{
return true;
}
else
{
return false;
}
}
};
错误代码2:
class Solution {
public:
bool backspaceCompare(string s, string t)
{
int i = s.size() - 1;
int j = t.size() - 1;
while (i <= 0 || j <= 0) //条件错误,应该是大于等于0
{
int backspaceCount = 0;
while (i <= 0) //条件错误
{
if (s[i] == '#')
{
backspaceCount++;
i--;
}
else
{
if (backspaceCount != 0)
{
backspaceCount--;
i--;
}
else
{
break;
}
}
}
while (j <= 0)
{
if (t[j] == '#')
{
backspaceCount++;
j--;
}
else
{
if (backspaceCount != 0)
{
backspaceCount--;
j--;
}
else
{
break;
}
}
}
if (i >= 0 && j >= 0)
{
if (s[i] != t[j])
{
return false;
}
else if (i >= 0 || j >= 0)
{
return false;
}
}
i--;
j--;
}
return true;
}
};
正确代码:
class Solution {
public:
bool backspaceCompare(string s, string t)
{
int i = s.length() - 1, j = t.length() - 1;
int skipS = 0, skipT = 0; //创建并维护两个计数器变量
while (i >= 0 || j >= 0) //使用正确的循环条件
{
while (i >= 0) //对s字符串的筛选
{
if (s[i] == '#')
{
skipS++, i--;
}
else if (skipS > 0)
{
skipS--, i--;
}
else
{
break;
}
}
while (j >= 0) //对t字符串的筛选
{
if (t[j] == '#')
{
skipT++, j--;
}
else if (skipT > 0)
{
skipT--, j--;
}
else
{
break;
}
}
if (i >= 0 && j >= 0) //进行比较
{
if (s[i] != t[j]) //只要有一个元素不一样就可以判断两个字符串不同
{
return false;
}
}
else
{
if (i >= 0 || j >= 0) //防止有一个数组提前遍历完了,但另一个还没有遍历完
{
return false;
}
}
i--, j--; //循环最后要将两个指针左移,因为每次外层循环都可以确定两个字符串中的元素是有被比较过的
}
return true;
}
};