-
Notifications
You must be signed in to change notification settings - Fork 119
/
Copy pathMinimum Number of Moves to Make Palindrome.java
50 lines (43 loc) · 1.47 KB
/
Minimum Number of Moves to Make Palindrome.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class Solution {
public int minMovesToMakePalindrome(String s) {
int len = s.length();
char[] strArr = s.toCharArray();
int steps = 0;
int l = 0, r = len-1; // use two pointers l for left and r for right.
while(l < r){
if(strArr[l] == strArr[r]){ // Both characters are equal. so keep going futher.
l++; r--;
}else{ // Both characters are not equal.
int k = r;
k = findKthIndexMatchingwithLthIndex(strArr, l, k); // loop through k, until char at index k = char at index l
if(k == l){ // we did not find any char at k = char at index l
swap(strArr, l);
steps++;
}else{
while(k < r){
swap(strArr, k);
steps++;
k++;
}
l++; r--;
}
}// end of else
} // end of while
System.out.println("palindrome: "+String.valueOf(strArr));
return steps;
}
public int findKthIndexMatchingwithLthIndex(char[] strArr, int l, int k){
while(k > l){
if(strArr[k] == strArr[l]){ return k; }
k--;
}
return k;
}
public void swap(char[] strArr, int l){
if(l+1 < strArr.length){
char tempCh = strArr[l];
strArr[l] = strArr[l+1];
strArr[l+1] = tempCh;
}
}
}