Minimum Number of Moves to Make Palindrome LeetCode solution in C++

1
class Solution {
2
public:
3
int minMovesToMakePalindrome(string s) {
4
int len = s.length();
5
string strArr = s;
6
int steps = 0;
7
int l = 0, r = len - 1; // use two pointers l for left and r for right.
8

9
while (l < r) {
10
if (strArr[l] == strArr[r]) { // Both characters are equal. so keep going futher.
11
l++;
12
r--;
13
} else { // Both characters are not equal.
14
int k = r;
15
k = findKthIndexMatchingwithLthIndex(
16
strArr, l,
17
k); // loop through k, until char at index k = char at index l
18

19
if (k == l) { // we did not find any char at k = char at index l
20
swap(strArr[l], strArr[l + 1]);
21
steps++;
22
} else {
23
while (k < r) {
24
swap(strArr[k], strArr[k + 1]);
25
steps++;
26
k++;
27
}
28
l++;
29
r--;
30
}
31
} // end of else
32

33
} // end of while
34
return steps;
35
}
36

37
int findKthIndexMatchingwithLthIndex(string strArr, int l, int k) {
38
while (k > l) {
39
if (strArr[k] == strArr[l]) {
40
return k;
41
}
42
k--;
43
}
44
return k;
45
}
46
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0