1078 字符串压缩与解压 (20 分)

C++每日面试之字符串自定义解压算法 每个字符串后面跟随一个数字,表示这个字符串的重复次数例如:“a5”的结果果为“aaaaa” “abc3"解压后的结果为"abcabcabc”2.如果字符出发次数一样,则根据ASCII编码顺序做升序排序,然后输出结果例如,“b2a2”输出的结果为“aabb”1.根据每个字符串的重复次数升序排序,然后输入结果例如,“a3b2”,输出的结果为“bbaaa”标题:简单的数据解压缩 时间限制: 1秒 内存限制: 32768K 语言限制:不限。[简单的数据解压缩]将一段压缩后的字符串解压缩,并且排序输出。 阅读详情

文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如 ccccc 就用 5c 来表示。如果字符没有重复,就原样输出。例如 aba 压缩后仍然是 aba。

解压方法就是反过来,把形如 5c 这样的表示恢复为 ccccc。

本题需要你根据压缩或解压的要求,对给定字符串进行处理。这里我们简单地假设原始字符串是完全由英文字母和空格组成的非空字符串。

输入格式:

输入第一行给出一个字符,如果是 C 就表示下面的字符串需要被压缩;如果是 D 就表示下面的字符串需要被解压。第二行给出需要被压缩或解压的不超过 1000 个字符的字符串,以回车结尾。题目保证字符重复个数在整型范围内,且输出文件不超过 1MB。

输出格式:

根据要求压缩或解压字符串,并在一行中输出结果。

输入样例 1:

C
TTTTThhiiiis isssss a   tesssst CAaaa as

结尾无空行

输出样例 1:

5T2h4is i5s a3 te4st CA3a as

结尾无空行

输入样例 2:

D
5T2h4is i5s a3 te4st CA3a as10Z

结尾无空行

输出样例 2:

TTTTThhiiiis isssss a   tesssst CAaaa asZZZZZZZZZZ

结尾无空行

解题思路: 题目没有什么难点,在一开始读题的时候就看出了一个坑,那就是当压缩的串是一个相同的串的时候的情况,但是到最后因为自己设计算法一开始就给自己挖下的大坑导致第四个测试点过不去,总的来时问题还是有的,第一在做这种题目时,不要过多的去考虑结果的存储,如果结果可以在运算的过程当中直接输出,那就直接输出,千万不要在开辟空间专门存储结果了,不仅没有什么意义,l浪费空间还会给自己留下大坑,切记切记.

加油加油。

//假设原始字符串完全是由英文字母和空格组成的字符串
//如果是字母C 表示下面的字符串是要进行压缩 , 如果是字母D表示下面的字符串要进行解压
//在题目的运行示例中可以看到空格他这里也算是字符
//这个题目一定会出现一些遍历上的问题,但是做法应该就是暴力算法了,嗯....开始吧
#include<iostream>
#include<string>
#include<cctype>
#include<algorithm>
#include<vector>
using namespace std;

int main()
{
	char character;
	cin >> character;
	getchar();//一定要记住在输入一行再起一行的时候,缓冲区会有一个回车留在里面,一定要处理掉
	string ans;
	vector<char>arr;//结果存放的位置
	if (character == 'C')
	{//在这里进行压缩的处理
		getline(cin, ans);
		int size = ans.size();
		int middle = 0;
		for (int i = 0; i < size; ++i)
		{
			if ((i == 0) || (ans[i] == ans[i - 1]))
			{
				middle++;
			}
			else
			{
				if (middle != 1)
					arr.push_back('0' + middle);
				arr.push_back(ans[i - 1]);
				middle = 1;
			}
		}//这里有一个忘了考虑的点,最后那个连续的字符会丢失,所以得补上
		if ((arr.size() == 0) || (arr[arr.size() - 1] != ans[size - 1]))//当俩个数组的最后一个元素不相等的时候,相当于说明最后一个字符串没有记录进去
		{
			int flag = 0;
			if (middle != 1)//这里遇到了一旦都是相同字母时候的情况
			{
				if (middle < 10)
				{
					if (middle == 1)
						arr.push_back(ans[size - 1]);
					else
					{
						arr.push_back('0' + middle);
						arr.push_back(ans[size - 1]);
					}
				}
				else
				{
					vector<char>mmide;
					while (middle >= 10)
					{
						flag = 1;
						int mide = middle % 10;
						mmide.push_back('0' + mide);
						middle = middle / 10;
					}
					arr.push_back('0' + middle);
					if (flag == 1)
					{
						reverse(mmide.begin(), mmide.end());
						for (auto it : mmide)
							arr.push_back(it);
						arr.push_back(ans[size - 1]);
					}
				}
			}
			else
				arr.push_back(ans[size - 1]);
		}
		for (auto it : arr)
		{
			cout << it;
		}
		cout << endl;
	}
	else
	{//在这里进行解压的处理
		getline(cin, ans);
		int size = ans.size();
		int middle = 0;
		for (int i = 0; i < size; ++i)
		{
			if (isalpha(ans[i]) || ans[i] == ' ')
			{
				if (middle == 0)
					cout << ans[i];
				else
					for (int j = 0; j < middle; ++j)
					{
						cout << ans[i];
					}
				middle = 0;
			}
			else {
				if (middle != 0)
				{
					middle = middle * 10;
					int mide = ans[i] - '0';
					middle = middle + mide;
				}
				else
				{
					int mide = ans[i] - '0';
					middle = middle + mide;
				}
			}
		}
	}
	return 0;
}

LZ78算法实现对任意字符串的压缩与解压 运行程序之后输入任意的字符串,将字符串转化成二进制数字字符串,然后利用LZ78算法实现对二进制字符串压缩解压,最后再恢复原来的字符串 立即下载

相关推荐

java算法,实现压缩及解压缩

Java实现压缩与解压缩ZIP   import java.io.BufferedInputStream;   import java.io.BufferedOutputStream;   import java.io.File;   import java.io.FileInputStream;   import java.io.FileOutputStream;   import java.util.zip.ZipEntry;   import java.util.zip.ZipOutputStream;   public class Zip {   static final int BUFFER = 2048;   public static void main(String argv[]) {   try {   BufferedInputStream origin = null;   FileOutputStream dest = new FileOutputStream("E:\\test\\myfiles.zip");   ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(   dest));   byte data[] = new byte[BUFFER];   File f = new File("e:\\test\\a\\");   File files[] = f.listFiles();   for (int i = 0; i < files.length; i++) {   FileInputStream fi = new FileInputStream(files[i]);   origin = new BufferedInputStream(fi, BUFFER);   ZipEntry entry = new ZipEntry(files[i].getName());   out.putNextEntry(entry);   int count;   while ((count = origin.read(data, 0, BUFFER)) != -1) {   out.write(data, 0, count);   }   origin.close();   }   out.close();   } catch (Exception e) {   e.printStackTrace();   }   }   }   解压缩的   import java.io.BufferedInputStream;   import java.io.BufferedOutputStream;   import java.io.File;   import java.io.FileOutputStream;   import java.util.Enumeration;   import java.util.zip.ZipEntry;   import java.util.zip.ZipFile;   public class UnZip {   static final int BUFFER = 2048;   public static void main(String argv[]) {   try {   String fileName = "E:\\test\\myfiles.zip";   String filePath = "E:\\test\\";   ZipFile zipFile = new ZipFile(fileName);   Enumeration emu = zipFile.entries();   int i=0;   while(emu.hasMoreElements()){   ZipEntry entry = (ZipEntry)emu.nextElement();   //会把目录作为一个file读出一次,所以只建立目录就可以,之下的文件还会被迭代到。   if (entry.isDirectory())   {   new File(filePath + entry.getName()).mkdirs();   continue;   }   BufferedInputStream bis = new BufferedInputStream(zipFile.getInputStream(entry));   File file = new File(filePath + entry.getName());   //加入这个的原因是zipfile读取文件是随机读取的,这就造成可能先读取一个文件   //而这个文件所在的目录还没有出现过,所以要建出目录来。   File parent = file.getParentFile();   if(parent != null && (!parent.exists())){   parent.mkdirs();   }   FileOutputStream fos = new FileOutputStream(file);   BufferedOutputStream bos = new BufferedOutputStream(fos,BUFFER);   int count;   byte data[] = new byte[BUFFER];   while ((count = bis.read(data, 0, BUFFER)) != -1)   {   bos.write(data, 0, count);   }   bos.flush();   bos.close();   bis.close();   }   zipFile.close();   } catch (Exception e) {   e.printStackTrace();   }   }   }

数据库保存之Java字符串的压缩与解压缩

当字符串太长,需要将字符串值存入数据库时,如果字段长度不够,则会出现插入失败;或者需要进行Http传输时,由于参数长度过长造成http传输失败等。

t194978的博客 3482

高光谱知识(1)-高光谱成像技术的理解

系列文章目录 高光谱技术可以获得待观测目标或场景的连续单色光谱图像,并通过空间维(x, y)数据和光谱维(λ)数据共同组成三维观测数据立方体,从而为研究人员提供探测目标或场景中的每一个点的空间和光谱特征细节。这种兼具相机的高分辨成像能力和光谱仪的高光谱分辨能力使得高光谱被广泛应用于测绘遥感、目标识别、环境监测与评估、临床影像诊断、过程监控等任务中,并在地理、空间、海洋、气候、大气、农业、植被、生态、医药、安防、制造与色度等多个领域中发挥巨大作用。 文章目录系列文章目录前言一、按获取数据的过程划分二、按照光

Echo_Code的博客 1万+

1078 字符串压缩与解压 (20 分)

1078字符串压缩与解压(20分) 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如ccccc就用5c来表示。如果字符没有重复,就原样输出。例如aba压缩后仍然是aba。 解压方法就是反过来,把形如5c这样的表示恢复为ccccc。 本题需要你根据压缩或解压的要求,对给定字符串进行处理。...

韩旭051的博客 1667

Grafana图像渲染插件安装全攻略:解决依赖缺失问题(附完整命令清单)

本文详细介绍了在CentOS/RHEL环境下安装Grafana图像渲染插件`grafana-image-renderer`的全过程,包括解决常见的依赖缺失问题。通过提供完整的命令清单和疑难问题排查指南,帮助用户高效部署和优化插件性能,确保图像渲染功能稳定运行。

weixin_30399821的博客 85

Android 面试题 Handler篇

1.Handler的实现原理。

ViewHandKownHealth的博客 955

1078 字符串压缩与解压 (20 分)

1078 字符串压缩与解压 (20 分) 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如 ccccc 就用 5c 来表示。如果字符没有重复,就原样输出。例如 aba 压缩后仍然是 aba。 解压方法就是反过来,把形如 5c 这样的表示恢复为 ccccc。 本题需要你根据压缩或解压的要求,对给定字符串进行处理。这里我...

丁世杰的博客 581

ur3手眼标定+realsenseL515

知乎 csdn

AI_future的博客 977

1078 字符串压缩与解压 (20 分)

1078 字符串压缩与解压 (20 分) 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如 ccccc 就用 5c 来表示。如果字符没有重复,就原样输出。例如 aba 压缩后仍然是 aba。 解压方法就是反过来,把形如 5c 这样的表示恢复为 ccccc。 本题需要你根据压缩或解压的要求,对给定字符串进行处理。...

一只大鸽子的博客 401

拆解全球18大“支付清算”体系:CLS、中国、美国、欧洲、日本、mBridge...

拆解全球18大“支付清算”体系:CLS、中国、美国、欧洲、日本、mBridge...

银行信息系统应用架构详解 882

使用 MATLAB/Simulink 进行锂电池SOC估算和等效电路建模

本文介绍了使用MATLAB/Simulink进行锂电池SOC估算与等效电路建模的方法。首先阐述了SOC估算和等效电路模型的背景及重要性,然后详细讲解了系统结构设计的主要组成部分,包括电池模块、SOC估算模块(采用卡尔曼滤波器算法)和等效电路模型等。文章重点分步说明了建模过程:从创建Simulink项目、搭建电池模块,到实现SOC估算算法(提供示例代码),构建等效电路模型(Thevenin模型示例),添加传感器模块,最后设置仿真参数。通过仿真运行分析关键指标(SOC估算误差、电压偏差等)来评估模型性能,为锂电

xiaoheshang_123的博客 263

1078 字符串压缩与解压 (20分)

1078 字符串压缩与解压 (20分) 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如 ccccc 就用 5c 来表示。如果字符没有重复,就原样输出。例如 aba 压缩后仍然是 aba。 解压方法就是反过来,把形如 5c 这样的表示恢复为 ccccc。 本题需要你根据压缩或解压的要求,对给定字符串进行处理。这里我们简单地假设原始字符串是完全由英文字母和空格组成的非空字符串。 输入格式: 输入第一行给出一个字符,如果是 C

qq_43060884的博客 315

【车联网】Automotive 软件过程能力成熟度模型——ASPICE标准入门介绍

ASPICE标准详细定义了与汽车电子软件开发相关的各种术语和概念,包括软件组件、系统集成、测试和验证等。这些定义确保了所有开发团队在使用相同术语时具有一致的理解。

奶爸的编程之路,也就一周冷个三天 2677

PTA 1078 字符串压缩与解压 (20 分)

1078 字符串压缩与解压 (20 分) 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如 ccccc 就用 5c 来表示。如果字符没有重复,就原样输出。例如 aba 压缩后仍然是 aba。 解压方法就是反过来,把形如 5c 这样的表示恢复为 ccccc。 本题需要你根据压缩或解压的要求,对给定字符串进行处理。这里我...

一蓑烟雨任平生 966

如何调试10G/25G以太网IP自协商/Link Training

如果是40G/50G, 100G以太网,选的是多通道的IP,务必保证两端的通道0是正确对接上的,因为在做自协商的时候,以太网只使用通道0,其它通道需在自协商完成后再加入工作。b. 自协商的工作完全由IP自动完成的,所以只要配置没问题,你只需要耐心等待就可以看到自协商的完成,以an_good_check为标志,并且进入下一步linktraining。c. 在LT的过程中,首先你要等到IP能够锁定LT帧,即frame_lock拉高,然后你就可以进行你自己的LT算法了,与AN不同LT是由客户手动完成的。

qq_43416206的博客 1508

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

1078 字符串压缩与解压 (20 分)

1078 字符串压缩与解压 (20 分) 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如 ccccc 就用 5c 来表示。如果字符没有重复,就原样输出。例如 aba 压缩后仍然是 aba。 解压方法就是反过来,把形如 5c 这样的表示恢复为 ccccc。 本题需要你根据压缩或解压的要求,对给定字符串进行处理。这里我...

恒治学 185

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: 1085 PAT单位排行 (25 分)
下一篇: 1040 有几个PAT (25 分)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值