交替字符串

scimence 2014-03-13 04:48:16
using System;

public class Test
{
//我的check函数明明都已经实现了交替字符串的验证功能,为嘛,结果说我的输出格式与标准不同
public static string check(String str1, String str2, String str3)
{
int i = 0, j = 0, k = 0;
while (i < str1.Length || j < str2.Length)
{
if (k == str3.Length) return "NO";

if (i < str1.Length && str1[i] == str3[k])
{
i++;
k++;
}
else if (j < str2.Length && str2[j] == str3[k])
{
j++;
k++;
}
else return "NO";
}

if (i == str1.Length && j == str2.Length && k == str3.Length)
return "YES";
else return "NO";
}

public static void Main()
{
string str1, str2, str3;
str1 = "asdfg";
str2 = "fhjk";
str3 = "asdffhjkg";

Console.WriteLine(check(str1, str2, str3));
//Console.WriteLine("输入样例\nabc\ndef\nabdecf");
//Console.WriteLine("abc\ndef\nabdecfg\n");
//Console.WriteLine("输出样例");
//Console.WriteLine(check("abc", "def", "abdecf"));
//Console.WriteLine(check("abc", "def", "abdecfg"));



//Console.WriteLine(check(Console.ReadLine(), Console.ReadLine(), Console.ReadLine()));
//Console.WriteLine(check(Console.ReadLine(), Console.ReadLine(), Console.ReadLine()));
}
}
...全文
155 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
scimence 2014-03-14
  • 打赏
  • 举报
回复
谢谢您的解答,虽然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"; }
t_xliang 2014-03-13
  • 打赏
  • 举报
回复
看了你的代码,发现有个有个明显的错误,就是当 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)) { }
scimence 2014-03-13
  • 打赏
  • 举报
回复
当使用str1 = Console.ReadLine();的形式进行输入时,会超时; 请问如何改为输入形式??语言不限,能实现输入即可。 Console.WriteLine(check(Console.ReadLine(), Console.ReadLine(), Console.ReadLine()));
t_xliang 2014-03-13
  • 打赏
  • 举报
回复
该题是oj形式的,所以你的s1,s2,s3不应该直接赋值,而应该改为输入形式
天蝎座小混混 2014-03-13
  • 打赏
  • 举报
回复
是csdn的一个编程比赛吧

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧