题目:给定一个01串,每次可以选择两个连续的下标,并对该元素的下标取反(0变1,1变0),问是否可以将串转换成只包含0或者只包含1。
解题思路:本题使用贪心算法,从前往后遍历,每次都使当前字符串变成想要的0或者1。
需要注意的是有些字符串只能变成全1或者全0,例如110只能变成全0。
const check = (x: string, flag: string) => {
var s = x.split('');
for (let j = 0; j + 1 < x.length; j++) {
if (s[j] === flag) {
continue;
}
if (s[j] === '1') {
s[j] = '0';
} else {
s[j] = '1';
}
if (s[j + 1] === '1') {
s[j + 1] = '0';
} else {
s[j + 1] = '1';
}
}
if (s[s.length - 1] === flag) {
return true;
}
return false;
};
const main = (s: string) => {
if (check(s, '1') || check(s, '0')) {
return 'yes';
} else {
return 'no';
}
};
console.log(main('1010010')); // yes
console.log(main('10100100')); // no