重复文本查找

2024-02-26

我的主要问题是试图找到一个合适的解决方案来自动转动这个,例如:

d+c+d+f+d+c+d+f+d+c+d+f+d+c+d+f+

进入这个:

[d+c+d+f+]4

即查找彼此相邻的重复项,然后从这些重复项中制作一个较短的“循环”。 目前我还没有找到合适的解决方案,期待回复。附:为了避免混淆,上述示例并不是唯一需要“循环”的东西,它因文件而异。哦,这是针对 C++ 或 C# 程序的,尽管我也愿意接受任何其他建议,但两者都可以。此外,主要思想是所有工作都将由程序本身完成,除了文件本身之外没有用户输入。 这是完整的文件,供参考,我对拉伸的页面表示歉意: #0 @16 v225 y10 w250 t76

l16 $ED $EF $A9 p20,20 >ecegb>dd+d+f+a+>c+f+d+ccegbgegecec d+c+d+f+d+c+d+f+d+c+d+f+d+c+d+f+ r1^1

/ l8 r1r1r1r1 f+f+g+cg+r4 a+c+a+g+cg+r4f+ f+g+cg+r4 a+c+a+g+cg+r4f+ f+g+cg+r4 a+c+a+g+cg+r4 f+ f+g+cg+r4 a+c+a+g+r4g+16f16c+ a+2^g+f+g+4 f+ff+4fd+f4 d+c+d+4c+c c4d+ c+d+4g+4a+4 r1^2^4^a+2^g+f+g+4 f+ff+4fd+f4 d+c+d+4c+cc4d+ c+d+4g+4a+4 r1^2^4^ r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1 r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1

#4 @22 v250 y10

l8 o3 rg+rg+rg+rg+rg+rg+rg+rg+rg+rg+rg+rg+rg+rg+rg+rg+rg+rg+rg+rg+rg+rg+rg+rg+ / r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1 r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1

#2 @4 v155 y10

l8 $ED $F8 $8F o4 r1r1r1 d+4f4f+4g+4 a+4r1^4^2 / d+4^fr2 f+4^fr2d+4^fr2 f+4^fr2d+4^fr2 f+4^fr2d+4^fr2 f+4^fr2 > d+4^fr2 f+4^fr2d+4^fr2 f+4^fr2 a+4^g+r2 f+1a+4^g+r2 f+1 f+4^fr2 d+1 f+4^fr2 d+2^d+4^ r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1 r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1

#3 @10 v210 y10

r1^1 o3 c8r8d8r8 c8r8c8r8c8r8c8r8c8r8c8r8c8r8c8r8c8r8c8r8c8r8 c8 @10d16d16@21 c8 @10d16d16@21 c8 @10d16d16@21 / c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@ 10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@ 21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8 c4@10d8@21c8 @10d16d16d16d16d16r16 c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@ 10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@ 21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8 c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@ 10d8@21c8c4@10d8@21c8c8@10d8@21c8c4@10d8@21c8c8@10d8@21c8 c4@10d8@21c8 @10b16b16>c16c16

#7 @16 v230 y10

l16 $ED $EF $A9 cceeggbbggeeccee d+d+f+f+a+a+f+f+d+d+d+d+ cceeggeecccc d+d+ffd+d+

#5 @4 v155 y10

l8 $ED $F8 $8F o4 r1r1r1r1 d+4r1^2^4 / cr2 c+4^cr2 cr2 c+4^cr2 cr2 c+4^cr2 cr2 c+4^cr2 a+4^>cr2 c+4^cr2 cr2 c+4^c r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1 r2 f+4^fr2 d+1f+4^fr2 d+1 c+4^cr2 c+4^cr2


不确定这是否是您正在寻找的。

我将字符串“testtesttesttest4notaduped+c+d+f+d+c+d+f+d+c+d+f+d+c+d+f+testtesttest”并将其转换为“[test]4 4notadupe[ d+c+d+f+]4 [测试]3 "

我确信有人会想出一个更好、更有效的解决方案,因为处理完整文件时有点慢。我期待其他答案。

        string stringValue = "testtesttesttest4notaduped+c+d+f+d+c+d+f+d+c+d+f+d+c+d+f+testtesttest";

        for(int i = 0; i < stringValue.Length; i++)
        {
            for (int k = 1; (k*2) + i <= stringValue.Length; k++)
            {
                int count = 1;

                string compare1 = stringValue.Substring(i,k);
                string compare2 = stringValue.Substring(i + k, k);

                //Count if and how many duplicates
                while (compare1 == compare2) 
                {
                    count++;
                    k += compare1.Length;
                    if (i + k + compare1.Length > stringValue.Length)
                        break;

                    compare2 = stringValue.Substring(i + k, compare1.Length);
                } 

                if (count > 1)
                {
                    //New code.  Added a space to the end to avoid [test]4 
                    //turning using an invalid number ie: [test]44.
                    string addString = "[" + compare1 + "]" + count + " ";

                    //Only add code if we are saving space
                    if (addString.Length < compare1.Length * count)
                    {
                        stringValue = stringValue.Remove(i, count * compare1.Length);
                        stringValue = stringValue.Insert(i, addString);
                        i = i + addString.Length - 1;
                    }
                    break;
                }
            }
        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重复文本查找 的相关文章

随机推荐