Я отправляю это от имени друга, так как считаю, что это довольно интересно:
Возьмите строку "abb". Оставляя любое количество букв меньше, чем длина строки в итоге получается 7 строки.
a b b ab ab bb abb
Из этих 4 являются палиндромы.
Аналогично для строки
"hihellolookhavealookatthispalindromexxqwertyuiopasdfghjklzxcvbnmmnbvcxzlkjhgfdsapoiuytrewqxxsoundsfamiliardoesit"
(длина строки 112) 2 ^ 112 - 1 могут быть сформированы строки.
Из них сколько палиндромы??
Ниже его реализация (в С++, C тоже хорошо). Это довольно медленно с очень длинными словами; он хочет знать, для чего самый быстрый алгоритм для этого (и мне тоже интересно: D).
#include <iostream>
#include <cstring>
using namespace std;
void find_palindrome(const char* str, const char* max, long& count)
{
for(const char* begin = str; begin < max; begin++) {
count++;
const char* end = strchr(begin + 1, *begin);
while(end != NULL) {
count++;
find_palindrome(begin + 1, end, count);
end = strchr(end + 1, *begin);
}
}
}
int main(int argc, char *argv[])
{
const char* s = "hihellolookhavealookatthis";
long count = 0;
find_palindrome(s, strlen(s) + s, count);
cout << count << endl;
}