Вопрос:
Две строки, a и b, называются близнецами, только если их можно сделать эквивалентными, выполнив некоторое количество операций с одной или обеими строками. Возможны две операции:
SwapEven: поменять символ с четным индексом на символ с другим четным индексом.
SwapOdd: поменять символ с нечетным индексом на символ с другим нечетным индексом.
Например, a = "abcd" и b-cdab "являются близнецами, потому что мы можем сделать их эквивалентными, выполняя операции. Альтернативно, a-" abcd "и b =" bcda "не являются близнецами (операции делают не перемещать символы между нечетными и четными индексами), а также a = "ab c" и b- "ab" (никакое количество операций не вставит a в строку b).
Мое решение до сих пор :
public static List<String> twins(List<String> a, List<String> b) {
ArrayList<String> result = new ArrayList<String>();
for (int j=0;j<a.size();j++) {
char temp;
char[] tempa= a.get(j).toCharArray();
char[] tempb= b.get(j).toCharArray();
for(int i=0; i<(tempa.length/2); i++) {
temp = tempa[i];
tempa[i] = tempa[i+2];
tempa[i+2] = temp;
}
String stra = new String(tempa);
String strb = new String(tempb);
if(stra.equals(strb))
result.add("Yes");
else
result.add("No");
}
return result;
}
Ошибки:
Я получаю исключение ArrayIndexOutOfBounds для секунды для l oop в некоторых случаях, тогда как иногда я получаю неправильный ответ.
EDIT:
public static List<String> twins(List<String> a, List<String> b) {
ArrayList<String> result = new ArrayList<String>();
int min = Math.min(a.size(),b.size());
for (int i=0; i<min; i++) {
char[] tempae= a.get(i).toCharArray();
char[] tempbo= b.get(i).toCharArray();
char[] tempao= a.get(i).toCharArray();
char[] tempbe= b.get(i).toCharArray();
for (int j=1, k=0; j<tempao.length; j+=2, k++) {
tempao[k] = tempao[j];
tempbo[k] = tempbo[j];
}
for (int l=0, m=0; l<tempao.length; l+=2, m++) {
tempae[m] = tempae[l];
tempbe[m] = tempbe[l];
}
Arrays.sort(tempae);
Arrays.sort(tempbe);
Arrays.sort(tempao);
Arrays.sort(tempbo);
String evenA = new String(tempae);
String oddA = new String(tempao);
String evenB = new String(tempbe);
String oddB = new String(tempbo);
if (evenA.equals(evenB) || oddB.equals(oddA))
result.add("Yes");
else
result.add("No");
}
return result;
}
Ошибки: я не получаю никаких исключений, но в большинстве тестов я не выполняю
Окончательное редактирование Я выяснил свои ошибки, я не удалял неизмененные элементы из символа []