ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

336. 文本压缩

2020-12-21 03:32:19  阅读:180  来源: 互联网

标签:index right temp 字符 ss 压缩 336 单词 文本


336. 文本压缩

中文English

给你一个只含有可见字符(ASCII 码范围 3232 至 126126)文本文件,文件中可能出现一些重复的单词,你需要对它们进行压缩。
压缩规则如下:

  1. 如果原文件中的字符不是英文字符,那么保留这些字符。
  2. 我们将连续的英文字符视为一个单词,单词的前后不应该还有其它的英文字符。
    • 如果一个单词在它之前的文本中没有出现过,那么保留它。
    • 如果一个单词在它之前出现过,将其替换成前文中它第一次出现是第几个不同单词的编号。

样例

输入:
Please, please do it--it would please Mary very,
very much.

Thanks
输出:
Please, please do it--4 would 2 Mary very,
7 much.

Thanks

说明

样例中,please 是第 22 个出现的不同的单词,it 是第 44 个出现的不同的单词,very 是第 77 个出现的不同的单词。

注意事项

压缩中应该大小写敏感,"Abc" 和 "abc" 不是同一个单词。
文本中总的字符数为 NN,1 \le N \le 10^41≤N≤10​4​​。
一个单词不会跨行显示。

字符串切割 + 是否字符判断

class Solution:
    """
    @param lines: the text to compress.
    @return: return the text after compression.
    """
    def textCompression(self, lines):
        # write your code here.
        if not lines: return ''

        ss = '|'.join(lines) 

        s_dict, res = {}, ''
        count, index = 0, 0
        length = len(ss)

        while index < length:
            temp_s = ''
            if ss[index].isalpha():
                right = index
                while right < length and ss[right].isalpha():
                    temp_s += ss[right] 
                    right += 1
                
                #判断是否之前已存dict
                if temp_s not in s_dict.keys():
                    count += 1
                    s_dict[temp_s] = str(count)
                else:
                    temp_s = s_dict[temp_s]
                res += temp_s   

                #更新
                index = right
            else:
                res += ss[index]
                index += 1

        #格式矫正
        results = res.split('|')
        return results

 

标签:index,right,temp,字符,ss,压缩,336,单词,文本
来源: https://www.cnblogs.com/yunxintryyoubest/p/14166213.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有