字符串压缩
具体问题是说,使用一种极为简单的算法来压缩字符串。该算法就是字符后面跟上该字符连续出现的次数。比如 "aabcccccaaa" 压缩完之后就是 "a2b1c5a3"。如果压缩过的字符串比原始的字符串还长,那么就返回原始的字符串。
解法也很直接。从第一个字符开始遍历字符串,并记录连续的次数。遇到下一个不一样的字符时,就把上一个字符和字数都添加到一个 StringBuilder
里面。然后看该字符连续的次数。遍历完成之后,判断新字符串和旧字符串的长度,如果新的长度短,则返回新字符串,否则,返回旧字符串。
public static string Compress(string s)
{
StringBuilder sb = new StringBuilder();
char last = s[0];
int count = 1;
for (int i = 1; i < s.Length; i++)
{
if (last == s[i])
{
count++;
}
else
{
sb.Append(last).Append(count);
last = s[i];
count = 1;
}
}
sb.Append(last).Append(count);
if (sb.ToString().Length >= s.Length)
{
return s;
}
return sb.ToString();
}