String substitutionCipherDecryption(String contents, String signature, String encryptedSignature) {
int[] cor = new int[26];
for (int i = 0; i < 26; i++) cor[i] = -1;
Set<Integer> usedLetters = new HashSet<>();
for (int i = 0; i < signature.length(); i++) {
cor[encryptedSignature.charAt(i) - 97] = signature.charAt(i) - 97;
usedLetters.add(signature.charAt(i) - 97);
}
int curletter = 0;
for (int i = 0; i < 26; i++) {
if (cor[i] == -1) {
while (usedLetters.contains(curletter)) curletter++;
cor[i] = curletter;
usedLetters.add(curletter);
}
}
String res = "";
for (int i = 0; i < contents.length(); i++) {
res += (char)(cor[contents.charAt(i) - 97] + 97);
}
return res;
}