Skip to content

Commit d60e416

Browse files
committed
Compress string: done
1 parent 4d39810 commit d60e416

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.rampatra.strings;
2+
3+
/**
4+
* @author rampatra
5+
* @since 2019-04-08
6+
*/
7+
public class CompressString {
8+
9+
/**
10+
* Compress a string, consisting of only alphabets, such that the compressed string contains the letter and
11+
* a number next to it representing the number of times it is repeated. Also, compress only if the letter is
12+
* repeated more than once and ignore it occurs just once.
13+
* EXAMPLE:
14+
* Input: aaabbcdd
15+
* Output: a3b2cd2
16+
* <p>
17+
* Time Complexity: O(n)
18+
* Space Complexity: O(n)
19+
* where,
20+
* n is the number of characters in the input string
21+
*
22+
* @param str the input string consisting on only alphabets
23+
* @return the compressed string
24+
*/
25+
private static String compress(String str) {
26+
// some basic validation
27+
if (str.length() == 0) {
28+
throw new IllegalArgumentException("Empty String");
29+
}
30+
31+
StringBuilder sb = new StringBuilder();
32+
int letterCount = 0;
33+
34+
for (int i = 0; i < str.length(); i++) {
35+
/*
36+
When the current character is a different one, append the previous character and its count to the
37+
result, and finally, reset the counter
38+
*/
39+
if (i != 0 && str.charAt(i) != str.charAt(i - 1)) {
40+
sb.append(str.charAt(i - 1));
41+
if (letterCount > 1) sb.append(letterCount);
42+
letterCount = 0;
43+
}
44+
letterCount++;
45+
}
46+
47+
// last character
48+
sb.append(str.charAt(str.length() - 1));
49+
if (letterCount > 1) sb.append(letterCount);
50+
51+
return sb.toString();
52+
}
53+
54+
public static void main(String[] args) {
55+
System.out.println(compress("a"));
56+
System.out.println(compress("aabbcc"));
57+
System.out.println(compress("aabcc"));
58+
System.out.println(compress("aaaabbbccaad"));
59+
}
60+
}

0 commit comments

Comments
 (0)