Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstring>
- #include <iostream>
- using namespace std;
- const int MAX_SIZE = 2048;
- struct SubString {
- int start;
- int length;
- };
- SubString longestPalindrome(char* s)
- {
- int length = strlen(s);
- if (length == 0) {
- return { 0, 0 };
- } else if (length == 1) {
- return { 0, 1 };
- } else {
- int max_len = 0, max_i = 0;
- int mid = 0, len, lh, rh;
- while (mid < length && length - mid >= max_len / 2) {
- len = 1;
- lh = mid - 1;
- rh = mid + 1;
- while (lh >= 0 && rh < length && s[lh] == s[rh]) {
- lh--;
- rh++;
- len += 2;
- }
- if (len > max_len) {
- max_len = len;
- max_i = lh;
- }
- if (++mid < length && s[mid - 1] == s[mid]) {
- lh = mid - 2;
- rh = mid + 1;
- len = 2;
- while (lh >= 0 && rh < length && s[lh] == s[rh]) {
- lh--;
- rh++;
- len += 2;
- }
- if (len > max_len) {
- max_len = len;
- max_i = lh;
- }
- }
- }
- return { max_i + 1, max_len };
- }
- }
- int main()
- {
- char str[MAX_SIZE];
- cout << "input please: " << endl;
- cin.getline(str, MAX_SIZE);
- SubString ss = longestPalindrome(str);
- cout << ss.length << endl;
- for (int i = ss.start; i < ss.start + ss.length; i++) {
- cout << str[i];
- }
- cout << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement