解题思路:

  • 首先,我们可以使用一个map来记录每个字符出现的次数。
  • 然后,我们可以根据字符的ASCII码从大到小的顺序遍历map,并将每个字符和对应的出现次数输出。
  • 最后,我们将输出的字符和次数拼接成压缩后的字符串。

C++代码实现如下:

#include <iostream>
#include <map>
#include <string>

using namespace std;

string compressString(string s) {
    map<char, int> count;
    for (char c : s) {
        count[c]++;
    }
    
    string compressedString = "";
    for (auto it = count.rbegin(); it != count.rend(); ++it) {
        compressedString += it->first;
        compressedString += to_string(it->second);
    }
    
    return compressedString;
}

int main() {
    string s;
    cin >> s;
    
    string compressedString = compressString(s);
    cout << compressedString << endl;
    
    return 0;
}

复杂度分析:

  • 时间复杂度:遍历字符串和map的过程分别需要O(n)的时间,其中n为字符串的长度。因此,总的时间复杂度为O(n)。
  • 空间复杂度:使用了一个map来记录字符出现的次数,最坏情况下需要存储全部字符,所以空间复杂度为O(n)
C++题目描述从电脑输入一个合法的英文字符构成的字符串将这个字符串按照ASCII码从大到小的顺序进行压缩后输出压缩规则是每个字符如果在这个字符串中出现了很多次则输出这个字符再紧接着输出这个字符总共出现的次数。输入描述输入一行一个字符串字符串长度不超过1e7输出描述属于一行一个字符串表示压缩后的字符串的样式样例1输入abcab输出c1b2a2

原文地址: https://www.cveoy.top/t/topic/h2ys 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录