slvrhwk
BAN USERpublic String removeTriplicate(String str) {
if (str == null || str.isEmpty() || str.length() < 3) {
return str;
}
char[] charArray = str.toCharArray();
int readIdx = 0;
int writeIdx = -1;
while (readIdx < charArray.length) {
if (readIdx < charArray.length - 2 && charArray[readIdx] == charArray[readIdx+1] && charArray[readIdx] == charArray[readIdx+2]) {
readIdx += 3;
} else {
charArray[++writeIdx] = charArray[readIdx++];
}
if (writeIdx > 1) {
if (charArray[writeIdx] == charArray[writeIdx-1] && charArray[writeIdx] == charArray[writeIdx-2]) {
writeIdx -=3;
}
}
}
if (writeIdx != -1) {
return new String(charArray, 0, writeIdx+1);
}
return new String();
}
Solution in java
public String charToFrequency(String str) {
if (str == null || str.isEmpty()) {
return str;
}
char current = str.charAt(0);
int count = 1;
StringBuilder output = new StringBuilder();
for (int i=1; i<str.length(); i++) {
if (str.charAt(i) == current) {
count++;
} else {
output.append(count).append(current);
current = str.charAt(i);
count = 1;
}
}
output.append(count).append(current);
return output.toString();
}
Time Complexity: O(n)
Space Complexity: O(n)
My two pointer solution
public int[] moveNonZeroElements(int[] arr) {
if (arr == null || arr.length == 0) {
return arr;
}
int i = 0;
int j = arr.length-1;
while(true) {
while (i < arr.length && arr[i] == 0) {
i++;
}
while (j >= 0 && arr[j] != 0) {
j--;
}
if (i < j) {
swap(arr, i, j);
} else {
break;
}
}
return arr;
}
public void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
- slvrhwk February 04, 2017