O(n)
对于字符串s
和字符串target
而言,当它们全为0
时自然返回true
,当其中一个串不全为0
另一个串全为0
时返回false,然后最后一种情况是两个串都有字符1
。
变换规则如下:
规则1
: 0
0
-> 0
0
规则2
: 0
1
-> 1
1
规则3
: 1
0
-> 1
1
规则4
: 1
1
-> 1
0
规则5
: 1
1
-> 0
1
由于两个串都有字符1
,我们无论如何都可以将串s
最后一个字符变为1
,证明如下:
当串s
最后一位本来就是字符1
时结论成立。
当串s
最后一位是字符0
时,由于串s
有字符1
,所以我们可以通过规则3
将最后一位变成字符1
。
当串s
最后一位是字符1
时,我们可以通过规则将前面的字符都变成与串target
相同的字符(由规则2
和规则5
实现)。
当串target
最后一位是1
的时候,匹配成功返回true
。
当串target
最后一位是0
的时候,由于串target
一定有字符1
,所以串s
前面也一定有字符1
,所以我们可以通过规则4
将串s
的最后一位变为字符0
,最后匹配成功,返回true
。
代码如下:
C++ 代码
class Solution {
public:
bool makeStringsEqual(string s, string target) {
int cnts = 0, cntt = 0;
int n = s.size();
for (int i = 0; i < n; i ++ )
{
if (s[i] == '1') cnts = 1;
if (target[i] == '1') cntt = 1;
}
if (cnts ^ cntt) return false;
return true;
}
};