-1

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

        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();

输出:AA BB 0 正确。哈利莎莉 2 正确

对于上述两个输入,它都会运行,但是当我提交评估时,它在他们的测试用例上失败。我无法访问我的逻辑失败的测试用例。我想知道我的逻辑在哪里失败。

4

1 回答 1

1

你的第二个循环都是错误的。它只是查找出现在数组中的字符数,并且计数仅使用 no 更新。包含在包含最少 no 的字符串中的常见字符。这些常见的字符。

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

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

于 2013-05-13T20:18:18.593 回答