我有以下两个字符串。
uncompressed "(A(2),I(10),A,A,A,A(3),R,R,R,R,A,A)"
compressed "(A(2),I(10),3A,A(3),4R,2A)"
忽略格式 A(n) 或 I(n) 中的任何条目,您可以看到,当我们找到任何连续的重复字符时,它会被替换为该位置处的单个条目和计数。
我知道一定有一种优雅的方法来做到这一点,但我不断想出看起来丑陋的嵌套循环。
字符串中的数据来自 ISO8211 文件格式,并标识应用于子字段中的数据的格式。
我确信这可以用一行 linq 来完成,但我没有主意(今晚)。
最佳答案
该技术称为 Run Length Encoding .
这是一个使用 Python 的示例:
from itertools import groupby
uncompressed = "(A(2),I(10),A,A,A,A(3),R,R,R,R,A,A)"
counted = [(k, len(list(g))) for k, g in groupby(uncompressed.split(','))]
compressed = ','.join(k if cnt==1 else str(cnt)+k for k, cnt in counted)
关于c# - 重复字符的字符串压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10376749/