Question: Given an array of characters formed by a’s and b’s. The string is marked with special character ‘X’ which represents the middle of the list (for example ababa…ababXbabab…baaa). Check whether the string is palindrome or not?
Input: ababXbaba
Output: PALINDROMEInput: ababababababbbbbXbbbbabababababa
Output: PALINDROMEInput: abababbbabbXabbbabbabbb
Output: NOT PALINDROME
This is one of the simplest algorithms. What we do is, start two indexes – one at the beginning of the string and other at the ending of the string. Each time compare whether the values at both the indexes are same or not. If the values are not same then we say that the given string is not a palindrome and break the loop. If the values are same then increment the starting index and decrement the ending index. Continue this process until both the indexes meet at the middle (at X) [this means that it is a palindrome].
If the indexes fail to meet, that means that the string is not a palindrome.
//function to check if the string is Palindrome
int isPalindrome(char *str)
{
//the first index
int start_index = 0;
//the last index
int last_index = strlen(str);
while(start_index < last_index && str[start_index] == str[last_index])
{
//increment start index and decrement last index
start_index++;
last_index--;
}
if(start_index < last_index)
{
//this means that we did not reach the center
printf("NOT A PALINDROME");
return 0;
}
else
{
//we reached the center
printf("PALINDROME");
return 1;
}
}
You can download a working sample of the source code here. Open in your favorite editor like gEdit, Notepad++, vim etc…
