PAT 字符串压缩与解压 20分 知识点:模拟

题目:1078 字符串压缩与解压 - PAT (Basic Level) Practice (中文) (pintia.cn)

解析:78_哔哩哔哩_bilibili

刚开始先读一个字符,根据这个字符是'C'还是'D'来决定是压缩还是解压缩。

我们先写'C'的逻辑:

这里我们用逆向思维,先让t++,然后我们去遍历给定的字符串,如果S[i]和S[i+1]不相等,这个时候就该停止t++了,并且要把t置空。

然后这个时候我们用一个空字符串+t+s[i] (得到的就是压缩的字符串)

但是我们发现结果如下:

Debug:

当遇到的字符相同个数是1的时候我们应该直接加这个字符串而不应该把'1'也加上。

Debug:

当i在最后一位的时候,没有s[i+1]进行比较了,我们应该直接把s[i]加上:

写'D'的逻辑:

Debug:

单个的字符我们没有加上:

修改:

code

js 复制代码
#include<bits/stdc++.h>
using namespace std;

string f1(string s)
{
    string ans;
    //逆向思维
    //首先让t++,然后遍历一下字符串,判断如果遇到两个不相同的停止t++
    int t=0;
    for(int i=0;i<s.size();i++)
    {
        t++;
        if(i+1!=s.size()&&s[i]!=s[i+1]||i+1==s.size())
        {
            if(t==1)ans+=s[i];
            else ans+=to_string(t)+s[i];
            t=0; 
        }
    }
return ans;
}

string f2(string s)
{
string ans;

for(int i=0;i<s.size();i++)
{
    if(isdigit(s[i]))
    {  int index=0,count=0;
         for(int j=i;j<s.size();j++)
         {
               count=count*10+s[j]-'0';
               if(s[j+1]>'9'||s[j+1]<'0') 
               {
                  index=j+1;
                   break;
               }
         }
           for(int k=1;k<=count;k++)
           {
               ans+=s[index];
               i=index;
           } 
     
    }
     else 
        ans+=s[i];
  
}
return ans;
}
int main()
{

    char op;cin>>op;getchar();
    if(op=='C')
    {
        //压缩
        string s1;getline(cin,s1);
       cout<< f1(s1);
    }
    if(op=='D')
    {
       string s1;getline(cin,s1);
       cout<< f2(s1);
    }
    return 0;
}
相关推荐
徐小夕1 小时前
再也不怕看不懂 GitHub 代码!这款AI开源项目,一键生成交互架构图
前端·算法·github
SirLancelot12 小时前
数据结构-Set集合(一)Set集合介绍、优缺点
java·开发语言·数据结构·后端·算法·哈希算法·set
YouQian7722 小时前
label 拓扑排序
数据结构·算法
YouQian7722 小时前
(补题)小塔的饭
算法
歌者長門2 小时前
做题笔记:某大讯飞真题28道
java·数据结构·算法
是店小二呀2 小时前
【动态规划 | 多状态问题】动态规划求解多状态问题
算法·动态规划
竹子_233 小时前
《零基础入门AI:传统机器学习核心算法解析(KNN、模型调优与朴素贝叶斯)》
人工智能·算法·机器学习
boyedu3 小时前
哈希指针与数据结构:构建可信数字世界的基石
数据结构·算法·区块链·哈希算法·加密货币
✿ ༺ ོIT技术༻3 小时前
剑指offer第2版:双指针+排序+分治+滑动窗口
算法·排序算法·剑指offer·双指针·滑动窗口·分治
细嗅蔷薇@3 小时前
C语言在键盘上输入一个3行3列矩阵的各个元素的值(值为整数),然后输出主对角线元素的积,并在fun()函数中输出。
c语言·算法·矩阵