Tôi đăng nội dung này thay mặt cho một người bạn vì tôi cho rằng điều này khá thú vị:Có bao nhiêu palindromes có thể được tạo thành bằng cách chọn các ký tự từ một chuỗi?
Lấy chuỗi "abb". Bằng cách bỏ ra bất kỳ số chữ cái nào nhỏ hơn độ dài của chuỗi, chúng tôi kết thúc với 7 chuỗi.
a b b ab ab bb abb
Trong số 4 là palindromes.
Tương tự cho chuỗi
"hihellolookhavealookatthispalindromexxqwertyuiopasdfghjklzxcvbnmmnbvcxzlkjhgfdsapoiuytrewqxxsoundsfamiliardoesit"
(chiều dài 112 string) 2^112-1 chuỗi có thể được hình thành.
Trong số này có bao nhiêu là palindromes ??
Dưới đây là triển khai của anh ấy (trong C++, C cũng tốt). Nó khá chậm với những từ rất dài; anh ta muốn biết thuật toán nhanh nhất có thể cho điều này (và tôi cũng tò mò: 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;
}
Các cũ (nghĩ amiga vs C64) magazin swedish "Datormagazinet", trong đó có một cuộc thi mã hóa mỗi tháng, một lần có nhiệm vụ này. –
Tại sao câu hỏi C, C++ này lại ?? –