LeetCode/cs/string-compression.cs

34 lines
829 B
C#
Raw Normal View History

public class Solution {
private static int WriteChar(char[] chars, int start, char c, int count) {
chars[start++] = c;
if (count == 1) {
return start;
}
int digits = 1 + (int)Math.Log10(count);
start += digits - 1;
for (int offset = 0; offset < digits; count /= 10, ++offset) {
chars[start - offset] = (char)('0' + (count % 10));
}
return start + 1;
}
public int Compress(char[] chars) {
int i = 0;
var count = 1;
for (int j = 1; j < chars.Length; ++j) {
if (chars[j] != chars[j - 1]) {
i = WriteChar(chars, i, chars[j - 1], count);
count = 0;
}
++count;
}
return WriteChar(chars, i, chars.Last(), count);
}
}