#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
char* input = "FourscoreandsevenyearsagoourfaathersbroughtforthonthiscontainentanewnationconceivedinzLibertyanddedicatedtothepropositionthatallmenarecreatedequalNowweareengagedinagreahtcivilwartestingwhetherthatnaptionoranynartionsoconceivedandsodedicatedcanlongendureWeareqmetonagreatbattlefiemldoftzhatwarWehavecometodedicpateaportionofthatfieldasafinalrestingplaceforthosewhoheregavetheirlivesthatthatnationmightliveItisaltogetherfangandproperthatweshoulddothisButinalargersensewecannotdedicatewecannotconsecratewecannothallowthisgroundThebravelmenlivinganddeadwhostruggledherehaveconsecrateditfaraboveourpoorponwertoaddordetractTgheworldadswfilllittlenotlenorlongrememberwhatwesayherebutitcanneverforgetwhattheydidhereItisforusthelivingrathertobededicatedheretotheulnfinishedworkwhichtheywhofoughtherehavethusfarsonoblyadvancedItisratherforustobeherededicatedtothegreattdafskremainingbeforeusthatfromthesehonoreddeadwetakeincreaseddevotiontothatcauseforwhichtheygavethelastpfullmeasureofdevotionthatweherehighlyresolvethatthesedeadshallnothavediedinvainthatthisnationunsderGodshallhaveanewbirthoffreedomandthatgovernmentofthepeoplebythepeopleforthepeopleshallnotperishfromtheearth";
char* sub_seq(const char* source, int start, int end)
{
char* result;
int i;
result
= malloc((end
- start
+ 1) * sizeof(char)); for (i = 0; i < end - start; ++i)
{
result[i] = source[i + start];
}
result[end - start] = '\0';
return result;
}
char* seek_palindrome(const char* input)
{
char* answer;
answer
= malloc(sizeof(char)); answer[0] = '\0';
int len, i, j, k;
for (i = 1; i < len - 1; ++i)
{
for (j = i - 1, k = i + 1; j >= 0 && k < len; --j, ++k)
{
if (input[j] == input[k])
{
char* palindrome = sub_seq(input, j, k + 1);
{
free(answer
); answer
= NULL
; answer = palindrome;
}
else
{
}
}
else
{
break;
}
}
}
for (i = 1; i < len - 1; ++i)
{
for (j = i, k = i + 1; j >= 0 && k < len; --j, ++k)
{
if (input[j] == input[k])
{
char* palindrome = sub_seq(input, j, k + 1);
{
free(answer
); answer
= NULL
; answer = palindrome;
}
else
{
}
}
else
{
break;
}
}
}
return answer;
}
int main(int argc, char* argv[])
{
clock_t t;
char* result;
result = seek_palindrome(input);
printf("The longest palindrome is '%s' calculated in %f seconds\n", result
, ((float) t
) / CLOCKS_PER_SEC
); free(result
); result
= NULL
; return EXIT_SUCCESS;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8dGltZS5oPgoKY2hhciogaW5wdXQgPSAiRm91cnNjb3JlYW5kc2V2ZW55ZWFyc2Fnb291cmZhYXRoZXJzYnJvdWdodGZvcnRob250aGlzY29udGFpbmVudGFuZXduYXRpb25jb25jZWl2ZWRpbnpMaWJlcnR5YW5kZGVkaWNhdGVkdG90aGVwcm9wb3NpdGlvbnRoYXRhbGxtZW5hcmVjcmVhdGVkZXF1YWxOb3d3ZWFyZWVuZ2FnZWRpbmFncmVhaHRjaXZpbHdhcnRlc3Rpbmd3aGV0aGVydGhhdG5hcHRpb25vcmFueW5hcnRpb25zb2NvbmNlaXZlZGFuZHNvZGVkaWNhdGVkY2FubG9uZ2VuZHVyZVdlYXJlcW1ldG9uYWdyZWF0YmF0dGxlZmllbWxkb2Z0emhhdHdhcldlaGF2ZWNvbWV0b2RlZGljcGF0ZWFwb3J0aW9ub2Z0aGF0ZmllbGRhc2FmaW5hbHJlc3RpbmdwbGFjZWZvcnRob3Nld2hvaGVyZWdhdmV0aGVpcmxpdmVzdGhhdHRoYXRuYXRpb25taWdodGxpdmVJdGlzYWx0b2dldGhlcmZhbmdhbmRwcm9wZXJ0aGF0d2VzaG91bGRkb3RoaXNCdXRpbmFsYXJnZXJzZW5zZXdlY2Fubm90ZGVkaWNhdGV3ZWNhbm5vdGNvbnNlY3JhdGV3ZWNhbm5vdGhhbGxvd3RoaXNncm91bmRUaGVicmF2ZWxtZW5saXZpbmdhbmRkZWFkd2hvc3RydWdnbGVkaGVyZWhhdmVjb25zZWNyYXRlZGl0ZmFyYWJvdmVvdXJwb29ycG9ud2VydG9hZGRvcmRldHJhY3RUZ2hld29ybGRhZHN3ZmlsbGxpdHRsZW5vdGxlbm9ybG9uZ3JlbWVtYmVyd2hhdHdlc2F5aGVyZWJ1dGl0Y2FubmV2ZXJmb3JnZXR3aGF0dGhleWRpZGhlcmVJdGlzZm9ydXN0aGVsaXZpbmdyYXRoZXJ0b2JlZGVkaWNhdGVkaGVyZXRvdGhldWxuZmluaXNoZWR3b3Jrd2hpY2h0aGV5d2hvZm91Z2h0aGVyZWhhdmV0aHVzZmFyc29ub2JseWFkdmFuY2VkSXRpc3JhdGhlcmZvcnVzdG9iZWhlcmVkZWRpY2F0ZWR0b3RoZWdyZWF0dGRhZnNrcmVtYWluaW5nYmVmb3JldXN0aGF0ZnJvbXRoZXNlaG9ub3JlZGRlYWR3ZXRha2VpbmNyZWFzZWRkZXZvdGlvbnRvdGhhdGNhdXNlZm9yd2hpY2h0aGV5Z2F2ZXRoZWxhc3RwZnVsbG1lYXN1cmVvZmRldm90aW9udGhhdHdlaGVyZWhpZ2hseXJlc29sdmV0aGF0dGhlc2VkZWFkc2hhbGxub3RoYXZlZGllZGludmFpbnRoYXR0aGlzbmF0aW9udW5zZGVyR29kc2hhbGxoYXZlYW5ld2JpcnRob2ZmcmVlZG9tYW5kdGhhdGdvdmVybm1lbnRvZnRoZXBlb3BsZWJ5dGhlcGVvcGxlZm9ydGhlcGVvcGxlc2hhbGxub3RwZXJpc2hmcm9tdGhlZWFydGgiOwoKY2hhciogc3ViX3NlcShjb25zdCBjaGFyKiBzb3VyY2UsIGludCBzdGFydCwgaW50IGVuZCkKewogICAgY2hhciogcmVzdWx0OwoJaW50IGk7CglyZXN1bHQgPSBtYWxsb2MoKGVuZCAtIHN0YXJ0ICsgMSkgKiBzaXplb2YoY2hhcikpOwoJZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpCgl7CgkJcmVzdWx0W2ldID0gc291cmNlW2kgKyBzdGFydF07CiAJfQogCXJlc3VsdFtlbmQgLSBzdGFydF0gPSAnXDAnOwogCXJldHVybiByZXN1bHQ7Cn0KCmNoYXIqIHNlZWtfcGFsaW5kcm9tZShjb25zdCBjaGFyKiBpbnB1dCkKewoJY2hhciogYW5zd2VyOwoJYW5zd2VyID0gbWFsbG9jKHNpemVvZihjaGFyKSk7CglhbnN3ZXJbMF0gPSAnXDAnOwoKCWludCBsZW4sIGksIGosIGs7CglsZW4gPSBzdHJsZW4oaW5wdXQpOwoKCWZvciAoaSA9IDE7IGkgPCBsZW4gLSAxOyArK2kpCgl7CgkJZm9yIChqID0gaSAtIDEsIGsgPSBpICsgMTsgaiA+PSAwICYmIGsgPCBsZW47IC0taiwgKytrKQoJCXsKCQkJaWYgKGlucHV0W2pdID09IGlucHV0W2tdKQoJCQl7CgkJCQljaGFyKiBwYWxpbmRyb21lID0gc3ViX3NlcShpbnB1dCwgaiwgayArIDEpOwoJCQkJaWYgKHN0cmxlbihwYWxpbmRyb21lKSA+IHN0cmxlbihhbnN3ZXIpKQoJCQkJewoJCQkJCWZyZWUoYW5zd2VyKTsgYW5zd2VyID0gTlVMTDsKCQkJCQlhbnN3ZXIgPSBwYWxpbmRyb21lOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWZyZWUocGFsaW5kcm9tZSk7CgkJCQl9CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlicmVhazsKCQkJfQoJCX0KCX0KCglmb3IgKGkgPSAxOyBpIDwgbGVuIC0gMTsgKytpKQoJewoJCWZvciAoaiA9IGksIGsgPSBpICsgMTsgaiA+PSAwICYmIGsgPCBsZW47IC0taiwgKytrKQoJCXsKCQkJaWYgKGlucHV0W2pdID09IGlucHV0W2tdKQoJCQl7CgkJCQljaGFyKiBwYWxpbmRyb21lID0gc3ViX3NlcShpbnB1dCwgaiwgayArIDEpOwoJCQkJaWYgKHN0cmxlbihwYWxpbmRyb21lKSA+IHN0cmxlbihhbnN3ZXIpKQoJCQkJewoJCQkJCWZyZWUoYW5zd2VyKTsgYW5zd2VyID0gTlVMTDsKCQkJCQlhbnN3ZXIgPSBwYWxpbmRyb21lOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWZyZWUocGFsaW5kcm9tZSk7CgkJCQl9CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlicmVhazsKCQkJfQoJCX0KCX0KCXJldHVybiBhbnN3ZXI7Cn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCnsKCWNsb2NrX3QgdDsKCWNoYXIqIHJlc3VsdDsKCXQgPSBjbG9jaygpOwoJcmVzdWx0ID0gc2Vla19wYWxpbmRyb21lKGlucHV0KTsKCXQgPSBjbG9jaygpIC0gdDsKCglwcmludGYoIlRoZSBsb25nZXN0IHBhbGluZHJvbWUgaXMgJyVzJyBjYWxjdWxhdGVkIGluICVmIHNlY29uZHNcbiIsIHJlc3VsdCwgKChmbG9hdCkgdCkgLyBDTE9DS1NfUEVSX1NFQyk7CglmcmVlKHJlc3VsdCk7IHJlc3VsdCA9IE5VTEw7CglyZXR1cm4gRVhJVF9TVUNDRVNTOwp9