代码之家  ›  专栏  ›  技术社区  ›  HappyHands31

代码战挑战-哈梅林的聋鼠-JavaScript-如何将一个字符串分割成一组特定的字符?

  •  3
  • HappyHands31  · 技术社区  · 5 年前

    Link to challenge

    基本上,这个想法是如果一只老鼠- O~ -面对吹笛手- P -那就走对了。

    这里有只老鼠往左走: O型~

    这是一只老鼠向右转: ~O

    我们想知道有多少“聋哑老鼠”存在于一根绳子里——有多少人面临错误的道路。

    这里,有一只聋老鼠: P O~ O~ ~O O~


    我的逻辑是首先检查Piper是否在字符串的左侧或右侧。

    如果他没有,那么我们需要根据吹笛手在琴弦上的位置来分割琴弦,然后计算出左侧有多少老鼠没有面对他,右侧有多少老鼠没有面对他。

    var countDeafRats = function(town) {
      town = town.replace(/[ ]/g, '');
      let deafCount = 0;
      //if piper's on the left
      if (town[0] === 'P') {
        for (let i = 0; i < town.length; i++) {
          if (town[i] === '~O') {
            deafCount ++;
          }
        }
      }
      //if piper's on the right
      if (town[town.length - 1] === 'P') {
        for (let j = 0; j < town.length; j++) {
          if (town[j] === 'O~') {
            deafCount ++;
          }
        }
      }
      let rats = town.split('P');
      console.log('ratssss', rats);
      let leftRats = [];
      let rightRats = [];
      return deafCount;
    }
    
    console.log(countDeafRats("~O~O P ~O~O"));

    在上面的例子中,这里是一组老鼠: [ '~O~O', '~O~O' ] 所以右边有两只老鼠走错了路(聋老鼠)。

    我想做的是,把左右老鼠按成各自的数组,然后在每个单独的数组中数聋老鼠。

    但我不能拆线 ~O~O 或者 ~O个 O型~ .

    我想得到 ['~O', '~O'] 对于 leftRats ['~O','~O'] 对于 rightRats .

    我试过:

    leftRats.push(rats[0].split('~O'));
    rightRats.push(rats[1].split('O~'));
    console.log('leftRatsssss', leftRats);
    console.log('rightRatssss', rightRats);
    

    但它所做的事情与预期的完全不同:

    leftRatsssss [ [ '', '', '' ] ]
    rightRatssss [ [ '~', 'O' ] ]
    

    分裂 不拆分字符串 通过 作为参数给定的字符串。所以这才是我问题的关键所在,那么-你怎么能用一组特定的字符分割一个字符串呢?

    一、 e.如果我想拆线 'the' 通过 'he' ,我想要 “那个” 变成 ['t', 'he'] -我为这个案子试过正则表达式?

    console.log("the".split(/[he]/gi));

    它似乎与我想要的相反。那么,对于按给定字符集拆分字符串有什么建议吗?

    1 回复  |  直到 5 年前
        1
  •  3
  •   CertainPerformance    5 年前

    你可以用 P 无论如何,然后转动每个段(在 第页 )每个2个字符块的数组。如 ~O~O P ~O~O 变成 ['~O', '~O'] 对于左边的块,和 ['~O','~O'] 为了正确的一块。然后计算出现的次数 O~ 在第一个块中,以及 ~O 在第二块中:

    var countDeafRats = function(town) {
      const [leftRats, rightRats] = town
        .replace(/[^O~P]/g, '')
        .split('P')
        .map(segment => segment.match(/.{2}/g) || []);
      return (
        leftRats.reduce((a, rat) => a + (rat === 'O~'), 0) +
        rightRats.reduce((a, rat) => a + (rat === '~O'), 0)
      );
    }
    
    console.log(countDeafRats("~O~O P ~O~O"));