找到string的最长公共子元素的逻辑有什么问题?

本文关键字:问题 元素 什么 string 找到 | 更新日期: 2023-09-27 18:13:25

我想出了这个逻辑来找到两个长度相等的字符串的最长共同子,但它只在简单的输出上成功运行,并且失败了其他人,请指导我我在这里做错了什么。

        String a, b;
        int sum = 0;
        int[] ar,br;
        ar = new int[26];
        br = new int[26];
        a = Console.ReadLine();
        b = Console.ReadLine();
        for (int i = 0; i < a.Length; i++)
        {
           ar[(a[i] - 65)]++;
            br[(b[i] - 65)]++;

        }
        for(int i =0;i<ar.Length;i++)
        {
            if (ar[i] <= br[i]) { sum += ar[i]; }
            else sum += br[i];
        }
        Console.Write(sum);
        Console.ReadLine();

输出:AABB0正确。HARRRY莎莉2正确

上面两个输入的

都运行,但是当我提交评估时,它在它们的测试用例上失败了。我无法访问他们的测试用例,因为我的逻辑失败了。我想知道我的逻辑哪里出错了。

找到string的最长公共子元素的逻辑有什么问题?

第二个循环完全错误。它只是查找在数组中出现的字符的计数,计数只更新为no。字符串中包含最少的。这些共同的特征。

请参考此链接以获取正确的实现。http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Longest_common_substring Retrieve_the_Longest_Substring

在使用输入字符串之前,还可以使用String.ToUpper将您的输入转换为大写字符。