压缩算法 【腾讯2020校园招聘-后台&综合-第一次笔试 】

简介: 压缩算法 【腾讯2020校园招聘-后台&综合-第一次笔试 】

题目:小Q想要给他的朋友发送一个神秘字符串,但是他发现字符串的过于长了,于是小Q发明了一种压缩算法对字符串中重复的部分进行了压缩,对于字符串中连续的m个相同字符串S将会压缩为[m|S](m为一个整数且1<=m<=100),例如字符串ABCABCABC将会被压缩为[3|ABC],现在小Q的同学收到了小Q发送过来的字符串,你能帮助他进行解压缩么?

输入描述:

输入第一行包含一个字符串s,代表压缩后的字符串。

S的长度<=1000;

S仅包含大写字母、[、]、|;

解压后的字符串长度不超过100000;

压缩递归层数不超过10层;

 

输出描述:

输出一个字符串,代表解压后的字符串。

 

输入例子1:

HG[3|B[2|CA]]F

 

输出例子1:

HGBCACABCACABCACAF

 

例子说明1:

HG[3|B[2|CA]]F−>HG[3|BCACA]F−>HGBCACABCACABCACAF

 

分析:

题目给出的为一串压缩过的字符串,压缩的规律为:将连续的重复字符字串压缩为一次,并记下出现的次数。现在要我们根据这个规律逆推出原字符串。这里我用了递归的方式来解这道题。

代码如下:

#include<stdio.h>
#include<string.h>
char s[1005];
//定义一个函数,输出重复的字符串 
int decom(int i)
{
//确定重复次数
    int sum = s[i]-'0';
    while (1){
        i++;
        if(s[i]=='|')
            break;
        else
            sum = sum*10 + s[i]-'0';
    }
//标记重复子串的起始位置
    int flag = i+1;
    int j=0;
    i+=1;
//遍历子串
    for(j;j<sum;){
//有嵌套的话,递归  
        if(s[i] == '[')
            i = decom(i+1);
//结束一次循环
        else if(s[i] == ']'){
            j++;
            i++;
            //printf("sum=%d i=%d j=%d flag=%d\n",sum,i,j,flag);
            if(j<sum){  
                i = flag;
                //printf("循环%d次\n",j);
            }
        }
        else{
            printf("%c",s[i]);
            i++;
        }
    }
    //printf("return%d\n",i);
    return i;
}
int main()
{
    scanf("%s",s);
    int i;
    for (i=0;i<strlen(s);i++)
    {
        if(s[i]=='[')
//这里要注意减一
            i = decom(i+1)-1;
        else if(s[i]==']' || s[i]=='|')
            continue;
        else
            printf("%c",s[i]);
    }
    return 0;
 }
目录
相关文章
|
9月前
|
算法 测试技术 C++
【动态规划】【状态压缩】【C++算法】1815 得到新鲜甜甜圈的最多组数
【动态规划】【状态压缩】【C++算法】1815 得到新鲜甜甜圈的最多组数
|
9月前
|
算法 JavaScript Java
【状态压缩】【动态规划】【C++算法】1125.最小的必要团队
【状态压缩】【动态规划】【C++算法】1125.最小的必要团队
|
6月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
237 1
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
|
2月前
|
存储 人工智能 自然语言处理
Delta-CoMe:清华联合OpenBMB等高校开源的新型增量压缩算法
Delta-CoMe是由清华大学NLP实验室联合OpenBMB开源社区、北京大学和上海财经大学提出的新型增量压缩算法。该算法通过结合低秩分解和低比特量化技术,显著减少了大型语言模型的存储和内存需求,同时保持了模型性能几乎无损。Delta-CoMe特别适用于处理数学、代码和多模态等复杂任务,并在推理速度上有所提升。
102 6
Delta-CoMe:清华联合OpenBMB等高校开源的新型增量压缩算法
|
4月前
|
算法 前端开发 Java
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
这篇文章总结了单链表的常见面试题,并提供了详细的问题分析、思路分析以及Java代码实现,包括求单链表中有效节点的个数、查找单链表中的倒数第k个节点、单链表的反转以及从尾到头打印单链表等题目。
52 1
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
|
3月前
|
存储 JSON 算法
TDengine 检测数据最佳压缩算法工具,助你一键找出最优压缩方案
在使用 TDengine 存储时序数据时,压缩数据以节省磁盘空间是至关重要的。TDengine 支持用户根据自身数据特性灵活指定压缩算法,从而实现更高效的存储。然而,如何选择最合适的压缩算法,才能最大限度地降低存储开销?为了解决这一问题,我们特别推出了一个实用工具,帮助用户快速判断并选择最适合其数据特征的压缩算法。
86 0
|
7月前
|
机器学习/深度学习 数据采集 人工智能
算法金 | 致敬深度学习三巨头:不愧是腾讯,LeNet问的巨细。。。
**LeNet 摘要** - LeNet 是 Yann LeCun 在 1989 年提出的卷积神经网络,用于手写数字识别,是深度学习和计算机视觉的里程碑。 - 网络结构包括卷积层(C1, C3, C5)、池化层(S2, S4)和全连接层(F6),处理 32x32 灰度图像,最终分类为 10 类。 - 卷积层提取特征,池化层降低维度,全连接层负责分类。激活函数主要使用 Sigmoid。 - LeNet 在 MNIST 数据集上表现优秀,但现代网络常使用 ReLU 激活和更深结构。 - LeNet 的局限性包括网络较浅、Sigmoid 梯度消失问题和平均池化,但其创新为后续 CNN 发展铺平道路
77 1
算法金 | 致敬深度学习三巨头:不愧是腾讯,LeNet问的巨细。。。
|
7月前
|
算法 Java
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
92 1
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
算法金 | 不愧是腾讯,问基础巨细节 。。。
**摘要:** 本文介绍了Adaboost算法的基本概念、工作原理和数学基础,它是由 Freund 和 Schapire 在 1996 年提出的迭代机器学习算法,通过组合多个弱分类器形成强分类器。Adaboost 通过调整样本权重,重点关注被错误分类的样本,以提高分类性能。文章还提供了代码示例,展示了如何使用决策树作为弱分类器,并在鸢尾花数据集上应用 Adaboost 分类器。此外,还讨论了Adaboost的优缺点及适用场景,强调其在分类问题上的高效性和广泛应用。
54 1
算法金 | 不愧是腾讯,问基础巨细节 。。。
|
7月前
|
算法 Java 程序员
Java面试题:解释Java的垃圾回收机制,包括常见的垃圾回收算法。介绍一下Java的垃圾回收算法中的标记-压缩算法。
Java面试题:解释Java的垃圾回收机制,包括常见的垃圾回收算法。介绍一下Java的垃圾回收算法中的标记-压缩算法。
62 0

热门文章

最新文章