Skip to content

844.比较含退格的字符串 ​

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是新的长度。