给定一组字符串,我想自动将每个字符串压缩成最小长度的正则表达式。如果这些字符串相同,则两个不同字符串的正则表达式应该相同。
例如:
字符串1:ABCCCCCCCCABCCCCCCCCCCBBC =(AB [C] {8}){2} CCBBC
字符串2:ABCCCCABCCCCCCCCCCBBC =(AB [C] {4}){2} C {6} BBC
*这是压缩的一个例子,即使它可能不是最简单的方法。
请注意字符串长度很重要:不需要使用B {2}来表示字符串BB,因为这会占用更多字符。
是否有既定方法可以做到这一点?
答案将指向对此问题的任何学术调查,并提供对此问题的解释和/或解决方案,无论是理论问题还是实施问题。在后一种情况下,如果这个实现是在Java中,我更喜欢它。
答案 0 :(得分:1)
与您的示例不同,并且尺寸不是最小,而是一种方法。
"ABCCCCCCCCABCCCCCCCCCCBBC".replace(/(([A-Z])\2{3,})/g,function($0,$1,$2){return $2+$1.length}).replace(/(\d+)/g,'{$1}')
"ABC{8}ABC{10}BBC"
"ABCCCCABCCCCCCCCCCBBC".replace(/(([A-Z])\2{3,})/g,function($0,$1,$2){return $2+$1.length}).replace(/(\d+)/g,'{$1}')
"ABC{4}ABC{10}BBC"