import java.util.*;
import java.util.stream.*;
class Solution {
public boolean solution(String[] phoneBooks) {
Arrays.sort(phoneBooks,(o1,o2)->o1.length()-o2.length());
Set<Integer> phoneNumberLengthSet = new HashSet<>();
for(String phoneNumber : phoneBooks){
phoneNumberLengthSet.add(phoneNumber.length());
}
List<Integer> phoneNumberLengths = phoneNumberLengthSet.stream()
.sorted(Comparator.naturalOrder())
.collect(Collectors.toList());
Map<String,Integer> surfixAndCount = new HashMap<>();
for(String phoneNumber : phoneBooks){
for(int length : phoneNumberLengths){
if(phoneNumber.length()<length) break;
String surfix = phoneNumber.substring(0, length);
surfixAndCount.putIfAbsent(surfix, 0);
surfixAndCount.put(surfix, surfixAndCount.get(surfix) + 1);
}
}
for(String phoneNumber : phoneBooks){
if(surfixAndCount.containsKey(phoneNumber) && surfixAndCount.get(phoneNumber) >= 2){
return false;
}
}
return true;
// Set<String> surfixSet = new HashSet<>();
// for(String phoneNumber : phoneBooks){
// for(int length : phoneNumberLengths){
// if(phoneNumber.length()<length) break;
// String surfix = phoneNumber.substring(0, length);
// if(surfixSet.contains(surfix)) return false;
// surfixSet.add(surfix);
// }
// }
// return true;
}
}