贪心 放路灯

76 阅读1分钟

题目

db6d68d5a845fd02bf317a9174be9f0a.png

  • 遍历规则为从 i 位置开始,如果 i 位置是 'x' 那么不需要放灯,如果 i 位置不是 'x',判断 i+1 的位置,如果 i+1 是 'x',那么 i 位置要放一个灯,因为 'x' 后面再放灯不能照亮 i 位置,如果 i 位置不是 'x',那么根据贪心在 i+1 位置放灯,不能 i+2 位置是 '.' 还是 'x' 都能满足,并且为了前面的灯不影响后面的灯,下一次需要从 i+3 位置开始
  • 这是种隐性贪心,不需要精确指出放置的位置,潜规则放置在最好的位置
function process(str) {
  let light = 0,
    i = 0;
  // while 中保证了之前的位置的灯不会影响 i 位置
  while (i < str.length) {
    if (str[i] === "x") {
      i++;
    } else {
      light++;
      if (i + 1 == str.length) {
        break;
      } else {
        // 如果下一个位置是'x'
        if (str[index + 1] == "x") {
          index = index + 2;
        } else {
          // 如果下一个位置是'.',那么不管下下个位置是'.'还是'x',都去到+3的位置
          // 如果下下个位置是'.',那么放中间位置满足(贪心策略放中间)
          // 如果下下个位置是'x',那么放中间的位置还是满足(贪心策略放中间)
          index = index + 3;
        }
      }
    }
  }
}