Задача. Преобразования слов
Условие задачи
На вход подается 2 строки. Нужно определить, можно ли превратить первую строку во вторую, заменяя одни буквы на другие, с учетом следующих правил:
- участвуют только буквы русского алфавита а-я;
- все буквы в нижнем регистре;
- за один шаг можно преобразовать все вхождения одной буквы в другую.
Входные данные:
Входная информация поступает из стандартного ввода в виде одной строки. В этой строке содержатся две подстроки, разделенные пробелом. Ваше решение должно учитывать вариант, когда на вход поданы строки разной длины. Некорректные данные на вход не поступают, дополнительные проверки не требуются.
Выходные данные:
В качестве ответа в стандартный вывод программа должна выводить 1 (если превратить можно) или 0 (если превратить нельзя).
Пример 1
Входные данные: привет прикол
Выходные данные: 1
Преобразования (выводить не нужно): в ⇒ к (прикет) е ⇒ о (прикот) т ⇒ л (прикол)
Пример 2
Входные данные: ааббдд ддббаа
Выходные данные: 1
Преобразования (выводить не нужно): д ⇒ я (ааббяя) а ⇒ д (ддббяя) я ⇒ а (ддббаа)
Пример 3
Входные данные: абаб ааах
Выходные данные: 0
Преобразовать нельзя, так как 'б' не сможет оказаться одновременно 'а' и 'х'.
Делал тесты на подачу следующих строк:
абвгдежзийклмнопрстуфхцчшщъыьэюя яюэьыъщшчцхфутсрпонмлкйизжедгвба,абаб ааах,ааббдд ддббаа,привет прикол, abcd pppp, палец пипец - везде результат равен ожидаемому.
Ниже код на java, но программа всё равно говорит, что задача решена неправильно. Что я делаю не так?:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str = reader.readLine();
int result = wordTransformCheck(str);
System.out.println(result);
}
private static int wordTransformCheck(String str) {
String[] words = str.split(" ");
char[] word1 = words[0].toCharArray();
char[] word2 = words[1].toCharArray();
List<Integer> indexList = new ArrayList<>();
List<Character> letterList = new ArrayList<>();
Set<Character> letterSet = new HashSet<>();
Map<Character, Character> map = new HashMap<>();
if (word1.length != word2.length) {
return 0;
}
for (int i = 0; i < word1.length; i++) {
letterSet.add(word1[i]);
}
if (letterSet.size() >= 33) return 0;
for (int i = 0; i < word1.length; i++) {
map.put(word1[i], word2[i]);
}
for (int i = 0; i < word2.length; i++) {
if (word2[i] != map.get(word1[i])) return 0;
}
for (int i = 0; i < word1.length; i++) {
if (word1[i] != word2[i]) {
for (int j = 0; j < indexList.size(); j++) {
if (i == indexList.get(j)) return 0;
}
for (int j = 0; j < letterList.size(); j++) {
if (word2[i] == letterList.get(j)) return 0;
}
char c = word1[i];
for (int j = i; j < word1.length; j++) {
if (word1[j] == c) {
word1[j] = word2[i];
indexList.add(j);
letterList.add(word2[i]);
}
}
} else {
letterList.add(word1[i]);
}
}
return Arrays.equals(word1, word2) ? 1 : 0;
}
}
Ответы (1 шт):
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Word {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String word = reader.readLine();//ввод слов с клавиатуры
int result=wordCheck(word);// переменная ресульт из класса wordCheck
System.out.println(result);
}
private static int wordCheck(String word) {
String[] words = word.split(" ");//Разбивка строки на слова по пробелу
char[] word1 = words[0].toCharArray();//1 слово
char[] word2 = words[1].toCharArray();//2слово
if (word1.length != word2.length) {
return 0;// сравнение по длине символов
}
if (word1.length==word2.length){
for(int i=0;i<word1.length;i++){
for(int j=i+1;j<word1.length;j++){
if(word1[i]== word1[j]){
if(word2[i]!= word2[j]){
return 0;
}
}
}
}
}
return 1;
}
}
Вот мой код он тоже работает на их примеры из текста,но пройти их конечную проверку на сервисе не может