该题是oj形式的,所以你的s1,s2,s3不应该直接赋值,而应该改为输入形式

解决方案 »

  1.   

    当使用str1 = Console.ReadLine();的形式进行输入时,会超时;
    请问如何改为输入形式??语言不限,能实现输入即可。Console.WriteLine(check(Console.ReadLine(), Console.ReadLine(), Console.ReadLine()));
      

  2.   

    看了你的代码,发现有个有个明显的错误,就是当 str1[i] == str3[k] && str2[j] == str3[k]是,你是一定会选i++的,但也可能是j++。所以这里应该用递归实现,这样可以回溯。
    你的输入应该没问题,可能是while死循环了。用c++输入是这样的:
    while(cin>>s1>>s2>>s3)
    {
           if(!cin) break;
    }
    用c输入是这样的:
    char s1[105],s2[105],s3[205];
    while(~scanf("%s%s%s",s1,s2,s3))
    {
    }
      

  3.   

    谢谢您的解答,虽然C#那个还是不行,不过好在我改成了C++版的可以,已经调试成功
    static bool check(string str1, string str2, string str3, int i, int j, int k, int len1, int len2, int len3)
            {
                if (len1 + len2 != len3) return false;                      //字符串长度不同则肯定不是交替字符串
                if (i == len1 && j == len2 && k == len3) return true;       //三个串均到达结尾处            if (i < len1 && str1[i] == str3[k])                         //字符串1未到结尾且当前字符与3相同
                    if (check(str1, str2, str3, i + 1, j, k + 1, len1, len2, len3)) return true;//str1先与str3比较
                if (j < len2 && str2[j] == str3[k])                         //字符串2未到结尾且当前字符与3相同
                    if (check(str1, str2, str3, i, j + 1, k + 1, len1, len2, len3)) return true;//str2先与str3比较            return false;                                               //都不相同则不是交替字符串
            } //求字符串长度
            static int len(string str)
            {
                int i = 0;
                while (str[i] != 0)        //求长原理字符串最后以0 结尾,统计不为0,直到为0 时即可
                    i++;
                return i;
            }        //封装,转化
            static string check(string str1, string str2, string str3)
            {
                if (check(str1, str2, str3, 0, 0, 0, len(str1), len(str2), len(str3))) return "YES";
                else return "NO";
            }