Я пытаюсь написать функцию, которая принимает в качестве входных данных массив строк только с строчными буквами. Функция возвращает массив одинаковых строк, но в каждой строке буквы переставлены так, что она становится палиндромом, если это возможно, а если нет, то возвращает -1.
public static Object buildPalin(String[] arrayOfStrings)
{
String[] palindrome = new String[arrayOfStrings.length];
int offset = 0;
int charWithoutReflection = 0;
List<String> whole= Arrays.asList(arrayOfStrings);
String wholeString = String.join("", whole);
for(int i=0; i< arrayOfStrings.length; i++)
{
if (arrayOfStrings[i] != "")
{
int currentCharPosition = wholeString.indexOf(arrayOfStrings[i],
i + 1);
if (currentCharPosition != -1)
{
palindrome[offset] = arrayOfStrings[i];
palindrome[palindrome.length - 1 - offset] =
arrayOfStrings[i];
arrayOfStrings[currentCharPosition] = "";
arrayOfStrings[i] = "";
}
else {
if (charWithoutReflection > 0)
return -1;
palindrome[palindrome.length/2] = arrayOfStrings[i];
charWithoutReflection++;
}
offset++;
}
}
return palindrome;
}
Эта функция отлично работает в случае, когда входной массив выглядит следующим образом: {"a", "b", "a"} {"a", "b", "c"} и так далее.
но когда у меня есть ввод, как показано ниже: {"aba", "bb", "cac"} и, как это, это массив строк, он терпит неудачу.
Любое руководство или предложение по этому поводу полезно.
ПРИМЕЧАНИЕ. Это не классное задание, а вопрос, который мне задали на собеседовании. Мне удалось придумать вышеуказанное решение, но теперь я пытаюсь заставить его работать и для углового случая. Это будет полезно для будущих интервью.
==============================Обновленный код согласно комментарию Эрика ниже=========
public static Object build(String[] arrayOfStrings) {
String[] palindrome = new String[arrayOfStrings.length];
int offset = 0;
int charWithoutReflection = 0;
List<String> whole= Arrays.asList(arrayOfStrings);
String wholeString = String.join("", whole);
for(int i=0; i< arrayOfStrings.length; i++)
{
if (arrayOfStrings[i] != "") {
int currentCharPosition = wholeString.indexOf(arrayOfStrings[i], i +
1);
if (currentCharPosition != -1)
{
palindrome[offset] = arrayOfStrings[i];
palindrome[palindrome.length - 1 - offset] = arrayOfStrings[i];
arrayOfStrings[currentCharPosition] = "";
arrayOfStrings[i] = "";
}
else {
if (charWithoutReflection > 0)
{
System.out.println("failed case");
return -1;
}
palindrome[palindrome.length/2] = arrayOfStrings[i];
charWithoutReflection++;
}
offset++;
}
}
return palindrome;
}
// code from main function calling above function is:
public static void main(String[] args) {
String a[] = {"abb"};
for ( int j = 0; j < a.length ; j++)
{
String[] tokens = a[j].split("");
System.out.println(Arrays.deepToString((Object[]) build(tokens)));
}
Выдает неверный вывод как: (для ввода [a,b,b]
[null, b, null] вместо [b, a, b]
{"a", "b", "a"} {"a","b","c"}
. Это двумерный массивString
. Ваш метод принимает только одномерный массив. - person Erick G. Hagstrom   schedule 13.09.2015wholeString
? Если вы просто пытаетесь переставить буквы каждого вводаString
, вам никогда не нужно видеть все этиStrings
как одно большоеString
. - person Erick G. Hagstrom   schedule 13.09.2015