我对包含重复的字符串的逻辑结构感兴趣。我想出了一个系统,我认为它应该工作,但我不确定是最有效的
这个想法很简单。取第一个元素:如果第二个元素是第一个元素的副本,则重复1次。我将其记录为一次重复,然后取前两个元素,检查它们是否在第三个和第四个元素中重复
通过这种方式,我检查(从第一个元素到字符串大小的一半)是否有重复的元素。最好是重复时间最长的。 之所以选择此选项,是因为这是一个递归过程:我在重复中检查是否还有其他重复
如果没有发现重复,我将裁剪第一个元素并重复算法
例如: “ACRCRCRTZZB” 在1'运行后成为: [{times:1,字符串:“acrcrcrtzzb”}] 2'运行后: [{times:1,字符串:“A”},{times:2,字符串:“CRCRT”},{times:1,字符串:“ZZB”}] 3'运行后: [{times:1,string:“A”},{times:2,string:[{times:2,string:“CR”},{times:1,string:“T”}],{times:1,string:[{times:2,string:“Z”},{times:1,string:“B”}]
此符号可能会出现混淆,但可以被视为: A[2[2CR]T][2Z]B 对于“ACRCRCRTZZB”
这个问题是一般问题,独立于语言。 我用python编写了这方面的初始代码,并在后端考虑了它的解决方案。 另外,一个javascript解决方案(如果在前端解决了的话)也适用于我
测试
# -*- coding: utf-8 -*-
import unittest
from string_repetitions import StrPattern as sp
class TestStringRepetitions(unittest.TestCase):
def setUp(self):
self.str_ptrn = sp()
pass
def test_fromStr2Tpl(self):
str_ptrn = sp()
a_li = []
a_tpl = []
b_li = [0, 1, 0, 1, ]
b_tpl = [(0, 1), (0, 1), ]
c_li = [0, 1, 3, 4, 4, 3, 3, 4, 4, 3]
c_tpl = [(0, 1), (3, 4), (4, 3), (3, 4), (4, 3)]
d_li = [0, 1, 3, 4, 2, 1, 1, 4]
d_tpl = [(0, 1), (3, 4), (2, 1), (1, 4)]
e_li = [0, 1, 3, ]
e_tpl = None
self.assertEqual(self.str_ptrn.fromStr2Tpl(a_li), a_tpl)
self.assertEqual(self.str_ptrn.fromStr2Tpl(b_li), b_tpl)
self.assertEqual(self.str_ptrn.fromStr2Tpl(c_li), c_tpl)
self.assertEqual(self.str_ptrn.fromStr2Tpl(d_li), d_tpl)
self.assertEqual(self.str_ptrn.fromStr2Tpl(e_li), e_tpl)
def test_logic(self):
a1_li = [(0, 1)] # only one row
a1_lo = [{"times": 1, "rows": [(0, 1), ]}, ]
b0_li = [(0, 1), (0, 1)]
b0_lo = [{"times": 2, "rows": [(0, 1)]}]
b1_li = [(0, 1), (0, 1), (0, 1), (0, 1), (0, 1), ]
b1_lo = [{"times": 5, "rows": [(0, 1)]}]
b2_li = [(0, 1), (4, 3)] # two row not repeated
b2_lo = [{"times": 1, "rows": [(0, 1), (4, 3), ]}, ]
c0_li = [(3, 4), (4, 3), (3, 4), (4, 3)]
c0_lo = [{"times": 2, "rows": [(3, 4), (4, 3)]}]
d0_li = [(0, 1), (3, 4), (2, 1), (1, 4)]
d0_lo = [{"times": 1, "rows": [(0, 1), (3, 4), (2, 1), (1, 4), ]}, ]
e0_li = [(0, 1), (3, 4), (4, 3), (3, 4), (4, 3)]
e0_lo = [{"times": 1, "rows": [(0, 1)]}, {"times": 2, "rows": [(3, 4), (4, 3)]}]
f0_li = [(0, 1), (3, 4), (2, 1), (1, 4)]
f0_lo = [{"times": 1, "rows": [(0, 1), (3, 4), (2, 1), (1, 4)]}]
self.assertEqual(self.str_ptrn.logic([]), [])
self.assertEqual(self.str_ptrn.logic(a1_li), a1_lo)
self.assertEqual(self.str_ptrn.logic(b0_li), b0_lo)
self.assertEqual(self.str_ptrn.logic(b1_li), b1_lo)
self.assertEqual(self.str_ptrn.logic(b2_li), b2_lo)
self.assertEqual(self.str_ptrn.logic(c0_li), c0_lo)
self.assertEqual(self.str_ptrn.logic(d0_li), d0_lo)
# self.assertEqual(self.str_ptrn.logic(e0_li), e0_lo)
'''
def test_fromList2Logic(self):
b1_li = [0, 1, 0, 1, 0, 1, 0, 1, 0, 1,]
b1_lo = [{"times": 5, "rows": [(0, 1)]}]
c0_li = [ 1, 0, 3, 4, 4, 3, 3, 4, 4, 3]
c0_lo = [{"times": 1, "rows": [(1, 0), ]}, {"times": 2, "rows": [(3, 4), (4, 3)]}]
d0_li = [1, 0, 0, 2, 4, 3, 4, 3, 0, 2, 4, 3, 4, 3]
d0_lo = [{"times": 1, "rows": [(1, 0), ]},
{"times": 2, "rows": [(0, 2),
{"times": 2, "rows": [(4, 3)]},], }
]
self.assertEqual(self.str_ptrn.logic(b1_li), b1_lo)
'''
if name == 'main':
unittest.main()
我编写的代码尚未完成: 我不知道我是否以最好的方式处理这个问题
目前没有回答
相关问题 更多 >
编程相关推荐