(python3) 字符串压缩与解压

题目赘述:

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

输入格式:

输入第一行给出一个字符,如果是 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
题目解析:

题目不难,对字符串的处理问题。首先一定是分两种情况。。

看如下解答,感觉可读性还不错。

压缩的思路是寻找连续相同的字符,输出“计数”“字符”,计数为1时省略数字,重点是如何使遍历过程不重复、不遗漏,对于i 的操作尤为关键;

解压的思路是找数字及其后的字符,没有数字直接copy,难点仍是遍历过程,且数字可能是一位数到三位数。

pro = input()
string = input()
n = len(string)
ans=""                  # 输出结果
if pro == "C":          # 压缩
    i = 0
    while i < n:        # 从i 开始寻找连续相同的字符,计数为con
        j = i+1
        con = 1
        while j < n and string[j]== string[i]:
            con += 1
            j += 1
        if con == 1:      # 计数为1 则直接加到ans
            ans = ans + string[i]
        else:
            new = "%d%s" % (con, string[i])
            ans = ans + new
        i = j             # i 定位到下一个字符

else:                    # 解压
    i=0
    while i < n:
        j = i + 1
        if string[i].isdigit():            # 从i 开始寻找连续的数字字符,为数量num
            while string[j].isdigit():
                j+=1
            num = int(string[i:j])
            new = string[j] * num
            ans = ans + new
            i = j + 1
        else:                               # 若i 不为数字,直接添加到ans
            ans = ans + string[i]
            i = j
print(ans)

原文地址:https://www.cnblogs.com/songhuasheng/p/10407681.html

时间: 2024-10-24 21:47:54

(python3) 字符串压缩与解压的相关文章

PAT 1078. 字符串压缩与解压

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

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

1078 字符串压缩与解压 (20分) https://pintia.cn/problem-sets/994805260223102976/problems/994805262018265088 1 #include <cstdio> 2 #include <cstring> 3 #include <string> 4 #include <iostream> 5 #include <algorithm> 6 using namespace std

记录新项目中遇到的技术及自己忘记的技术点【DES加密解密,MD5加密,字符串压缩、解压,字符串截取等操作】

一.DES加密.解密 #region DES加密解密 /// <summary> /// 进行DES加密 /// </summary> /// <param name="pToEncrypt">要加密的字符串</param> /// <param name="sKey">密钥,必须为8位</param> /// <returns>以Base64格式返回的加密字符串</retur

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

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

C#字符串压缩与解压

1 public static string CompressString(string str) 2 { 3 var compressBeforeByte = Encoding.GetEncoding("UTF-8").GetBytes(str); 4 var compressAfterByte = Compress(compressBeforeByte); 5 string compressString = Convert.ToBase64String(compressAfterB

1078 字符串压缩与解压

题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805262018265088 题解: 1 #include <iostream> 2 #include<cstdio>//getchar所需的头文件 3 #include<string> 4 using namespace std; 5 6 int main() { 7 char select; 8 cin >> selec

字符串的压缩与解压

public static string compress(string aString) { if (string.IsNullOrEmpty(aString)) return ""; StringBuilder sb = new StringBuilder(); byte[] byteArray = CompressByte(aString); foreach (byte item in byteArray) sb.Append((char)item); return sb.ToS

C#压缩与解压

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using ICSharpCode.SharpZipLib.Zip; using ICSharpCode.SharpZipLib.Checksums; using System.Runtime.InteropServices; namespace Common { /// <summary>

python zlib 压缩与解压

例子1:压缩与解压字符串 import zlib message = 'abcd1234' compressed = zlib.compress(message) decompressed = zlib.decompress(compressed) print 'original:', repr(message) print 'compressed:', repr(compressed) print 'decompressed:', repr(decompressed) 结果 original: