Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 减少元素重复的字符串的算法_Python_String_Reduction - Fatal编程技术网

Python 减少元素重复的字符串的算法

Python 减少元素重复的字符串的算法,python,string,reduction,Python,String,Reduction,我对包含重复的字符串的逻辑结构感兴趣。我想出了一个系统,我认为它应该工作,但我不确定是最有效的 这个想法很简单。取第一个元素:如果第二个元素是第一个元素的副本,则重复1次。我将其记录为一次重复,然后取前两个元素,检查它们是否在第三个和第四个元素中重复 通过这种方式,我检查(从第一个元素到字符串大小的一半)是否有重复的元素。最好是重复时间最长的。 之所以选择此选项,是因为这是一个递归过程:我在重复中检查是否还有其他重复 如果没有发现重复,我将裁剪第一个元素并重复算法 例如: “ACRCRCRTZZ

我对包含重复的字符串的逻辑结构感兴趣。我想出了一个系统,我认为它应该工作,但我不确定是最有效的

这个想法很简单。取第一个元素:如果第二个元素是第一个元素的副本,则重复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()
我编写的代码尚未完成:
我想知道我是否以最好的方式解决了这个问题。

这看起来很像。看看附件中的帖子是否有助于谢谢你的建议。我的目标有点不同。我正在寻找将“aaaabbcdeabbcdcaabcdeeeebbbdaae”转换为“4a2b CDE ABC 3A BCDE 5E C 6B 3D 2A E”这看起来很像ee如果附件中的帖子有帮助,谢谢你的建议。我的目标有点不同。我正在寻找“aaaabbcdeabbcdcaaaabcdeeeecbbbbdaae”到“4a2b CDE ABC 3A BCDE 5E C 6B 3D 2A E”的转换