844.比较含退格的字符串
他要退格,那我就把退格应用进字符串,把两个字符串一比就好了 应用退格的这个过程用到双指针:
cpp
class Solution {
public:
bool backspaceCompare(string s, string t)
{
applyBackspace(s);
// cout << s <<endl;
applyBackspace(t);
// cout << t << endl;
return s == t;
}
private:
void applyBackspace(string &str)
{
int slow = 0, fast, n = str.length();
for (fast = 0; fast < n; fast++) {
if (str[fast] == '#') {
if (slow > 0) {
slow--;
}
}
else {
str[slow] = str[fast];
slow++;
}
}
// str[slow] = '\0';
str.resize(slow);
// cout << str << endl;
}
};快指针遇到#,就让慢指针往回走,这就是退格。里面加了一个slow>0的判断,是为了防止退格数量太多,待会slow越界了。正常按多次退格应该是被锁死在0这个位置的。
string和C字符数组不一样!
神剑高程里只允许用C字符数组,我以为C++字符串也靠‘\0’判末尾,试图用str[slow] = '\0';重新划分字符串。但是不是这样的,string会自己记录一个长度,只能用str.resize(n);来重新划分,n是新的长度。