文章

166

粉丝

68

获赞

855

访问

61.6k

头像
字符串压缩 题解:有意思的统计题
P1718 兰州大学机试题
发布于2025年2月25日 18:03
阅读数 259

#include <bits/stdc++.h>

using namespace std;

int main() {
    string s;
    while(cin>>s){
        map<char,int>mp;
        mp[s[0]]++;
        for(int i=1;i<s.size();i++){
            if(mp[s[i]]==0){
                if(mp[s[i-1]]==1)cout<<s[i-1];
                else cout<<s[i-1]<<mp[s[i-1]];
                mp[s[i-1]]=0;
            }
            mp[s[i]]++;
        }
        for(auto x:mp){
            if(x.second==0)continue;
            if(x.second==1)cout<<x.first;
            else cout<<x.first<<x.second;
        }
        
    }
}

我们的要求是对字符串进行压缩,多于1的需要压缩成字母数字的形式,这个问题不难,但是很有意思,需要使用边遍历边输出的方式,我们使用map辅助来保证输出,其中,我们对整个字符串进行遍历之前,需要存一下第一个,以为后面的判断写好预备条件,然后我们遇到不同的时候才输出前面的连续状态,并把前面的连续状态的统计值改成0,每次无论如何判断,都需要对当前的字符进行加一,所以直接写在最后,为什么使用这个而不是直接统计完成再输出,因为他会存在字符asdxxxxddd这样的形式,d在前后的序数不同,需要分开。最后,别忘了消除0影响,保证输出完备即可。

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发