Тема: Алготестер задача. Пошук Паліндрома.
Пошук палiндрома
Обмеження: 1 сек., 256 МiБ
Зеник має рядок s довжини n, кожен символ якого - 0 або 1. Зеник може видаляти символи з рядка s, проте екзамени вже скоро i часу лишилося мало, тому вiн може видалити не бiльше половини символiв. Марiчцi подобаються палiндроми - такi рядки, що читаються однаково злiва направо тасправа налiво. Допоможiть Зениковi видалити не бiльше половини символiв, щоб кiнцевий рядок сподобався Марiчцi (тобто був палiндромом).
Вхiднi данi
У першому рядку задано єдине натуральне число n - довжина рядка. В другому рядку задано s - рядок з котрого потрiбно видалити символи.
Вихiднi данi
Виведiть кiнцевий рядок пiсля видалення не бiльше, нiж половини символiв
Обмеження1≤n≤105
Приклади
Вхiднi данi (stdin)
2
01
Вихiднi данi (stdout)
1
Вхiднi данi (stdin)
3
010
Вихiднi данi (stdout)
010
mport java.util.Scanner;
import java.util.Vector;
public class Main {
static int n;
static Vector<Integer> vector = new Vector<>();
public static void main(String[] args) {
input();
if (is_it_polindrome()){
for (int i = 0; i < n; i++){
System.out.print(vector.elementAt(i));
}
}
}
public static boolean is_it_polindrome(){
for (int i = 0; i <= vector.size() / 2.0; i++){
if( !vector.elementAt(i).equals(vector.elementAt(vector.size()-i-1 ) ) ) return false;
}
return true;
}
public static void input(){
Scanner in = new Scanner(System.in);
n = in.nextInt();
try {
for (int i = 0; i < n; i++){
int input = System.in.read() - '0';
if (input == 0 || input == 1){
vector.add(input);
}
}
}catch (Exception e){ }
}
}
Не зміг прудумати алгоритму. Я просто перевіряв, якщо початкова стрічка паліндром, то виводжу.
Спасибі за допомогу!