Algo.Java.SetBitMask

Let’s say we have smth in range [1..32] || [1..64], so we can write that smth to the corresponding bit like this

int mask = 0;
mask |= 1 << 2; // 0001, last significant bit (LSB) will be shifted to 2 positions left and will result in 0100

example from leetcode

package org.example;


/**
 * https://leetcode.com/problems/count-pairs-of-similar-strings/description/
 */
public class Main {
    public static void main(String[] args) {

    }

    public int similarPairs(String[] words) {
        int[] masks = new int[words.length];
        for (int i = 0; i < words.length; i++) {
            masks[i] = getMask(words[i]);
        }

        int countSimilar = 0;
        for (int i = 0; i < words.length; i++) {
            for (int j = i + 1; j < words.length; j++) {
                if (masks[i] == masks[j]) {
                    countSimilar++;
                }
            }
        }
        return countSimilar;
    }

    private int getMask(String s) {
        int mask = 0;
        int n = s.length();
        for (int i = 0; i < n; i++) {
            mask |= 1 << (s.charAt(i) - 'a');
        }
        return mask;
    }
}
This entry was posted in Без рубрики. Bookmark the permalink.