Reputation: 307
James found a love letter his friend Harry has written for his girlfriend. James is a prankster, so he decides to meddle with the letter. He changes all the words in the letter into palindromes.
To do this, he follows 2 rules:
(a) He can reduce the value of a letter, e.g. he can change 'd' to 'c', but he cannot change 'c' to 'd'. (b) In order to form a palindrome, if he has to repeatedly reduce the value of a letter, he can do it until the letter becomes 'a'. Once a letter has been changed to 'a', it can no longer be changed.
Each reduction in the value of any letter is counted as a single operation. Find the minimum number of operations required to convert a given string into a palindrome.
Input Format The first line contains an integer T, i.e., the number of test cases. The next T lines will contain a string each. The strings do not contain any spaces.
Output Format A single line containing the number of minimum operations corresponding to each test case.
Constraints 1 ≤ T ≤ 10 1 ≤ length of string ≤ 104 All characters are lower case English letters.
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int count;
int result;
int i,j;
scanf("%d",&count);
for (i = 0 ; i < count ; i++){
result = 0;
char * string;
scanf("%ms",&string);
int k = (int)strlen(string);
printf("Length: %d\n",k);
int l = k/2;
printf("L is: %d\n",l);
for ( j = 0 ; j < l ; j++){
printf("first char is is: %c\n",string[j]);
printf("Second char is is: %c\n",string[k-j-1]);
printf("Current loop count: %d\n",j);
if ( string[j] != string [k-j] ){
int g = (int)(string[j] - string[k-j-1]);
if ( g > 0){
result += g;
}
else{
result -= g;
}
}
else;
}
printf("%d\n",result);
}
return 0;
}
Sample Input #00
4
abc
abcba
abcd
cba
Sample Output #00
2
0
4
2
Explanation
For the first test case, abc -> abb -> aba. For the second test case, abcba is already palindromic string. For the third test case, abcd -> abcc -> abcb -> abca = abca -> abba. For the fourth test case, cba -> bba -> aba.
The above stated code is working for the given sample input, but it is not the correct one according to hacckerrank. Can someone point out the error please?
Upvotes: 1
Views: 7002
Reputation: 781726
The error is here:
if ( string[j] != string [k-j] ){
The second character should be string[k-j-1]
. For instance, when j = 0
, you should compare with string[k-1]
to compare the first and last characters of the string.
Also, you have a memory leak. At the bottom of the outer loop you should do:
free(string);
Upvotes: 2