01反转

199 阅读1分钟

题目:给定一个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