有一个长度为N的字符数组,它由若干连续递增子序列构成,比如
如何将其压缩为
您可以通过以下步骤实现这个需求:
初始化两个指针,分别指向数组的第一个字符和第二个字符,并初始化一个变量count来记录子序列长度。
循环比较这两个字符,如果相同,count++,并移动第二个指针;如果不同,就把首字母和count的值写入新的字符数组中,然后重置count值为1,把第一个指针移动到第二个指针处,继续进行比较。
循环结束后,把首字母和最后一个子序列的长度写入新的字符数组中。
for (int i = 1; i < n; i++) {
if (str[i] == str[i-1]+1) {
count++;
} else {
result += str[i-1];
result += to_string(count);
count = 1;
}
}
result += str[n-1];
result += to_string(count);
循环判断递增多少次,不递增了就重来这个过程
std::string compress_str(const std::string& input)
{
int count = 0;
char last_c;
std::string result = "";
for (char c: input) {
if (0 == count) {
last_c = c;
result += c;
count++;
continue;
}
if (c - last_c == 1) {
count++;
} else {
result += std::to_string(count);
count = 1;
result += c;
}
last_c = c;
}
if (count > 0) result += std::to_string(count);
return result;
}