เมื่อได้รับประโยคและความท้าทายคือการหา palindrome ที่ยาวที่สุดจากประโยคที่กำหนด
พาลินโดรมคืออะไร
Palindrome คือคำหรือลำดับที่ความหมายยังคงเดิมแม้ว่าจะย้อนกลับสตริง
ตัวอย่าง − Nitin หลังจากกลับสตริงแล้ว ความหมายยังคงเหมือนเดิม
ความท้าทายคือการหา palindrome ที่ยาวที่สุดจากประโยคที่กำหนด
ชอบประโยคคือ:malayalam liemadameil iji
ประกอบด้วยคำพาลินโดรมสามคำ แต่คำที่ยาวที่สุดคือ − liemadameil
อัลกอริทึม
START STEP 1 -> Declare start variables I, j, k, l, max to 0, index to -1, check to 0, count to 0 Step 2 -> Loop For i to 0 and i<strlen(str) and i++ Set max =0, k =i and j=i+1 Loop While str[j]!=' ' and str[j]!='\0' Increment j by 1 End While Set l=j-1 IF str[k]!=' ' and str[k]!='\0' Loop While k<=1 If str[k]==str[l] Increment max by 1 If count<=max Set index=i and count = max End If End IF Else Set max = 0, count = -1 Break End Else Increment k and I by 1 End Loop While End If Set i=j Step 3 -> End Loop For Step 4 -> Loop For i = index and i!=-1 && str[i]!=' ' && str[i]!='\0' and i++ Print str[i] Step 5 -> End Loop For STOP
ตัวอย่าง
#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { char str[] = {"malayalam liemadameil iji"}; int i, k, l, j, max =0, index = -1, check = 0, count = 0; for(i=0; i<strlen(str); i++) { max = 0; k = i; j = i+1; while(str[j]!=' ' && str[j]!='\0'){ j++; } l = j-1; if(str[k]!=' ' && str[k]!='\0') { while(k<=l) { if (str[k]==str[l]) { max++; if(count<=max) { index = i; count = max; } } else { max = 0; count = -1; break; } k++; l--; } } i = j; } for (i = index; i!=-1 && str[i]!=' ' && str[i]!='\0'; i++) { printf("%c", str[i]); } return 0; }
ผลลัพธ์
หากเรารันโปรแกรมด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้
liemadameil