We are given two strings P and Q, each consisting of N lowercase English letters. For each position in the strings, we have to choose one letter from either P or Q, in order to construct a new string S, such that the number of distinct letters in S is minimal. Our task is to find the number of distinct letters in the resulting string S.
For example, if P = "ca" and Q = "ab", S can be equal to: "ca", "cb", "aa" or "ab". String "aa" has only one distinct letter ('a'), so the answer is 1 (which is minimal among those strings).
Write a function:
class Solution { public int solution(String P, String Q); }
that, given two strings P and Q, both of length N, returns the minimum number of distinct letters of a string S, that can be constructed from P and Q as described above.
Examples:
1. Given P = "abc", Q = "bcd", your function should return 2. All possible strings S that can be constructed are: "abc", "abd", "acc", "acd", "bbc", "bbd", "bcc", "bcd". The minimum number of distinct letters is 2, which be obtained by constructing the following strings: "acc", "bbc", "bbd", "bcc".
2. Given P = "axxz", Q = "yzwy", your function should return 2. String S must consist of at least two distinct letters in this case. We can construct S = "yxxy", where the number of distinct letters is equal to 2, and this is the only optimal solution.
3. Given P = "bacad", Q = "abada", your function should return 1. We can choose the letter 'a' in each position, so S can be equal to "aaaaa".
4. Given P = "amz", Q = "amz", your function should return 3. The input strings are identical, so the only possible S that can be constructed is "amz", and its number of distinct letters is 3.
Write an efficient algorithm for the following assumptions:
- N is an integer within the range [1..200,000];
- strings P and Q are both of length N;
- strings P and Q are made only of lowercase letters (a−z);
- strings P and Q contain a total of at most 20 distinct letters.
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> elements
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>()
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
for(int i=0; i<)
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new )
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get
}
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len =
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i)
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q)
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q)
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
}
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
}
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i)
}
}
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int curr
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i< )
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
}
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j))
}
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
dist
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctSearch
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveE)
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element)
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, )
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
return 0;
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int )
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, )
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer)
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0])
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement)
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0]=num;
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if()
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch()
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for()
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=0; )
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; )
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<l; i++){
if(element.get(i))
}
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<l; i++){
if(element.get(i).get(now))
}
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<l; i++){
if(element.get(i).get(now) && haveElement)
}
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<l; i++){
if(element.get(i).get(now) && (haveElement)
}
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<l; i++){
if(element.get(i).get(now) && (haveElement & (1<<i))
}
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<l; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<l; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, )
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<l; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch()
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<l; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch(haveElement, now+1, state|mask, element, num)
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<l; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch(haveElement, now+1, state|mask, element, num+1, answer);
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
public int solution(String P, String Q) {
// Implement your solution here
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<l; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch(haveElement, now+1, state|mask, element, num+1, answer);
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
public int solution(String P, String Q) {
// Implement your solution here
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<l; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch(haveElement, now+1, state|mask, element, num+1, answer);
}
}
}
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:659) at java.util.ArrayList.get(ArrayList.java:435) at Solution.solution(Solution.java:29) at Exec.run(exec.java:45) at Exec.main(exec.java:34)
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:659) at java.util.ArrayList.get(ArrayList.java:435) at Solution.solution(Solution.java:29) at Exec.run(exec.java:45) at Exec.main(exec.java:34)
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:659) at java.util.ArrayList.get(ArrayList.java:435) at Solution.solution(Solution.java:29) at Exec.run(exec.java:45) at Exec.main(exec.java:34)
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:659) at java.util.ArrayList.get(ArrayList.java:435) at Solution.solution(Solution.java:29) at Exec.run(exec.java:45) at Exec.main(exec.java:34)
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
public int solution(String P, String Q) {
// Implement your solution here
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<l; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch(haveElement, now+1, state|mask, element, num+1, answer);
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
List<List<Boolean>> element = new ArrayList<>(26);
int l = element.size();
public int solution(String P, String Q) {
// Implement your solution here
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<l; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch(haveElement, now+1, state|mask, element, num+1, answer);
}
}
}
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:659) at java.util.ArrayList.get(ArrayList.java:435) at Solution.solution(Solution.java:29) at Exec.run(exec.java:45) at Exec.main(exec.java:34)
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:659) at java.util.ArrayList.get(ArrayList.java:435) at Solution.solution(Solution.java:29) at Exec.run(exec.java:45) at Exec.main(exec.java:34)
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:659) at java.util.ArrayList.get(ArrayList.java:435) at Solution.solution(Solution.java:29) at Exec.run(exec.java:45) at Exec.main(exec.java:34)
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:659) at java.util.ArrayList.get(ArrayList.java:435) at Solution.solution(Solution.java:29) at Exec.run(exec.java:45) at Exec.main(exec.java:34)
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
public int solution(String P, String Q) {
// Implement your solution here
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<l; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch(haveElement, now+1, state|mask, element, num+1, answer);
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
public int solution(String P, String Q) {
// Implement your solution here
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<l; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch(haveElement, now+1, state|mask, element, num+1, answer);
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
public int solution(String P, String Q) {
// Implement your solution here
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<30; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch(haveElement, now+1, state|mask, element, num+1, answer);
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<30; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch(haveElement, now+1, state|mask, element, num+1, answer);
}
}
}
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:659) at java.util.ArrayList.get(ArrayList.java:435) at Solution.solution(Solution.java:29) at Exec.run(exec.java:45) at Exec.main(exec.java:34)
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:659) at java.util.ArrayList.get(ArrayList.java:435) at Solution.solution(Solution.java:29) at Exec.run(exec.java:45) at Exec.main(exec.java:34)
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:659) at java.util.ArrayList.get(ArrayList.java:435) at Solution.solution(Solution.java:29) at Exec.run(exec.java:45) at Exec.main(exec.java:34)
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:659) at java.util.ArrayList.get(ArrayList.java:435) at Solution.solution(Solution.java:29) at Exec.run(exec.java:45) at Exec.main(exec.java:34)
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<30; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch(haveElement, now+1, state|mask, element, num+1, answer);
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public static int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private static void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<30; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch(haveElement, now+1, state|mask, element, num+1, answer);
}
}
}
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:659) at java.util.ArrayList.get(ArrayList.java:435) at Solution.solution(Solution.java:29) at Exec.run(exec.java:45) at Exec.main(exec.java:34)
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:659) at java.util.ArrayList.get(ArrayList.java:435) at Solution.solution(Solution.java:29) at Exec.run(exec.java:45) at Exec.main(exec.java:34)
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:659) at java.util.ArrayList.get(ArrayList.java:435) at Solution.solution(Solution.java:29) at Exec.run(exec.java:45) at Exec.main(exec.java:34)
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:659) at java.util.ArrayList.get(ArrayList.java:435) at Solution.solution(Solution.java:29) at Exec.run(exec.java:45) at Exec.main(exec.java:34)
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public static int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
/ int l = element.size();
for(int i=0; i<l; i++){
element.add(new ArrayList<>(l));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private static void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<30; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch(haveElement, now+1, state|mask, element, num+1, answer);
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public static int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
// int l = element.size();
for(int i=0; i<30; i++){
element.add(new ArrayList<>(30));
for(int j=0; j<l; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<l; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<l; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<l; i++){
for(int j=0; j<l; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private static void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<30; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch(haveElement, now+1, state|mask, element, num+1, answer);
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public static int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
// int l = element.size();
for(int i=0; i<30; i++){
element.add(new ArrayList<>(30));
for(int j=0; j<30; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<30; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<30; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<30; i++){
for(int j=0; j<30; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private static void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<30; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch(haveElement, now+1, state|mask, element, num+1, answer);
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public static int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
// int l = element.size();
for(int i=0; i<30; i++){
element.add(new ArrayList<>(30));
for(int j=0; j<30; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<30; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<30; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<30; i++){
for(int j=0; j<30; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private static void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<30; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch(haveElement, now+1, state|mask, element, num+1, answer);
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public static int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
// int l = element.size();
for(int i=0; i<30; i++){
element.add(new ArrayList<>(30));
for(int j=0; j<30; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<30; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<30; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<30; i++){
for(int j=0; j<30; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private static void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<30; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch(haveElement, now+1, state|mask, element, num+1, answer);
}
}
}
import java.util.*;
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public static int solution(String P, String Q) {
// Implement your solution here
List<List<Boolean>> element = new ArrayList<>(30);
// int l = element.size();
for(int i=0; i<30; i++){
element.add(new ArrayList<>(30));
for(int j=0; j<30; j++){
element.get(i).add(false);
}
}
int len = P.length();
for(int i=0; i<len; i++){
int p = P.charAt(i) - 'a';
int q = Q.charAt(i) - 'a';
element.get(p).set(q, true);
element.get(q).set(p, true);
}
int temp = 0;
for(int i=0; i<30; i++){
if(element.get(i).get(i)){
temp++;
for(int j=0; j<30; j++){
element.get(i).set(j, false);
element.get(j).set(i, false);
}
}
}
int haveElement = 0;
for(int i=0; i<30; i++){
for(int j=0; j<30; j++){
if(element.get(i).get(j)){
haveElement |= 1 << i;
break;
}
}
}
int[] answer = {P.length()};
distinctElementSearch(haveElement, 0, 0, element, temp, answer);
return answer[0];
}
private static void distinctElementSearch(int haveElement, int now, int state, List<List<Boolean>> element, int num, int[] answer){
if(num >= answer[0]){
return;
}
int mask = 1 << now;
if(mask>haveElement){
answer[0] = num;
return;
}
if((mask & haveElement) == 0){
distinctElementSearch(haveElement, now+1, state, element, num, answer);
}
else
{
int temp = 0, d = 0;
for(int i=now+1; i<30; i++){
if(element.get(i).get(now) && (haveElement & (1<<i)) > 0){
temp |= 1 << i;
d++;
}
}
distinctElementSearch(haveElement^temp, now+1, state|temp, element, num+d, answer);
distinctElementSearch(haveElement, now+1, state|mask, element, num+1, answer);
}
}
}
The solution obtained perfect score.
A - size of the alphabet
Small tests where some letters have big but similar frequencies, N <= 17, A <= 12.