Матч 335, Палиндромизация (Palindromize)

Дивизион 2, Уровень 1

 

Палиндромом называется строка, которая читается одинаково слева направо и справа налево. К концу заданного слова следует дописать наименьшее количество букв (или ничего не дописывать) так, чтобы полученное слово стало палиндромом.

 

Класс: Palindromize

Метод: string minAdds(string s)

Ограничения: s содержит от 1 до 50 символов ‘a’-‘z’.

 

Вход. Строка из прописных букв латинского алфавита.

 

Выход. Строка-палиндром наименьшей длины, префиксом которой является входное слово.

 

Пример входа

s

add

“cigartragic”

“redocpot”

 

Пример выхода

“adda”

“cigartragic”

“redocpotopcoder”

 

 

РЕШЕНИЕ

обработка строк

 

Функция isPalindrom(s)  проверяет, является ли слово s палиндромом. Перебираем подстроки s1 строки s с 0 до i - го символа (i = 0, 1, 2, …, |s|), обращаем их. Находим наименьшее i, для которого строка s + reverse(s1) будет палиндромом.

 

 

ПРОГРАММА

 

#include <cstdio>

#include <algorithm>

#include <string>

using namespace std;

 

int isPalindrom(string s)

{

  int i, n = s.size();

  for(i = 0; i <n / 2; i++)

    if (s[i] != s[n - 1 - i]) return 0;

  return 1;

}

 

class Palindromize

{

public:

  string minAdds(string s)

  {

    int i;

    string s1;

    for(i = 0; i <= s.size(); i++)

    {

      s1 = s.substr(0,i);

      reverse(s1.begin(),s1.end());

      if (isPalindrom(s + s1)) return s + s1;

    }

  }

};