0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【LeetCode 1461】Check If a String Contains All Binary Codes of Size K 解説(Java・初心者向け)

0
Posted at

2進数コードとは?

01 のみで構成された文字列です。

例えば:

k 存在するすべての2進数コード 個数
1 0, 1 2
2 00, 01, 10, 11 4
3 000, 001, 010, 011, 100, 101, 110, 111 8

個数は常に:2^kです。

問題の意味(簡単に)

文字列 s の中に、

「長さ k のすべての2進数パターン(合計 2^k 個)」が

部分文字列としてすべて存在するか確認する問題です。

なぜこれで解けるか?

長さ k のすべての2進数コードの個数は必ず:

2^k

HashSet は重複を除去するため、

HashSet のサイズ == 2^k

なら、すべてのコードが存在することになります。


Java実装

import java.util.HashSet;
import java.util.Set;

class Solution {

    public boolean hasAllCodes(String s, int k) {

        Set<String> set = new HashSet<>();

        // 長さ k の substring をすべて取得
        for (int i = 0; i <= s.length() - k; i++) {
            String sub = s.substring(i, i + k);
            set.add(sub);
        }

        // 必要なコード数 = 2^k
        int need = 1 << k;

        return set.size() == need;
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?