すべての画像を検索


  • 解答
  • const solution = (s, t) => {
      let count = 0;
      const hashOfT = t
        .split('')
        .reduce(
          (hash, char) =>
            hash.hasOwnProperty(char)
              ? (hash[char]++, hash)
              : ((hash[char] = 1), hash),
          {},
        );
      const limit = s.length;
      const targetLength = t.length;
      let leftPointer = 0;
      const hashOfS = {};
    
      const compare = target => {
        for (const key in hashOfT) {
          if (target.hasOwnProperty(key)) {
            if ((target[key]--, target[key]) < 0) return false;
          } else return false;
        }
        return true;
      };
    
      for (let rightPointer = 0; rightPointer < limit; rightPointer++) {
        const char = s[rightPointer];
        hashOfS.hasOwnProperty(char) ? hashOfS[char]++ : (hashOfS[char] = 1);
        if (rightPointer >= targetLength) {
          const prevChar = s[leftPointer++];
          (hashOfS[prevChar]--, hashOfS[prevChar]) == 0 && delete hashOfS[prevChar];
        }
        if (rightPointer >= targetLength - 1 && compare({ ...hashOfS })) count++;
      }
      return count;
    };
    
    const result = solution('bacaAacba', 'abc');
    console.log(result);