【发布时间】:2017-05-11 06:38:22
【问题描述】:
我正在做一个来自 Top-Coder 的问题。问题陈述是-
有一天,Jamie 注意到许多英语单词只使用字母 A 和 B. 此类词的示例包括“AB”(腹部的缩写), “BAA”(羊发出的声音)、“AA”(一种熔岩)和“ABBA”(一种 瑞典流行音乐)。
受此观察的启发,Jamie 创建了一个简单的游戏。你是 给定两个字符串:初始和目标。游戏的目标是找到 一系列有效的移动,将初始变为目标。那里 是两种类型的有效移动:
将字母 A 添加到字符串的末尾。反转字符串,然后 将字母 B 添加到字符串的末尾。返回“可能”(引号 为了清楚起见)如果有一系列有效的移动会改变 初始进入目标。否则,返回“不可能”。
下面是我的解决方案,它通过了面板中的所有测试但在系统测试中失败。但是,我没有得到任何关于哪个测试用例失败的具体信息。请检查我的代码是否在某些情况下不起作用.
class ABBA
{
public string canObtain(string initial,string target)
{
string s = "Impossible";
if (initial.Length > target.Length)
return "Impossible";
if (initial.Equals(target))
return "Possible";
if (CheckFirstWay(target,initial))
{
s=canObtain(initial+"A",target);
}
if (s.Equals("Impossible") && CheckSecondWay(target,initial))
{
s=canObtain(ReverseStringDirect(initial) + "B",target);
}
return s;
}
public static string ReverseStringDirect(string s)
{
char[] array = new char[s.Length];
int forward = 0;
for (int i = s.Length - 1; i >= 0; i--)
{
array[forward++] = s[i];
}
return new string(array);
}
private static bool CheckSecondWay(string final, string initial)
{
if (final.Contains(ReverseStringDirect(initial) + "B") || final.Contains("B"+initial))
{
return true;
}
else
{
return false;
}
}
private static bool CheckFirstWay(string final1, string initial)
{
if (final1.Contains(initial + "A") || final1.Contains(ReverseStringDirect(initial+"A")))
{
return true;
}
else
{
return false;
}
}
}
【问题讨论】:
-
由于您的解决方案已经部分工作,这是一个 TopCoder 问题,您可能会在 Code Review 上获得更好的反馈。
-
请检查答案..那里提供了测试用例。
-
如果有帮助请选择答案。它可能会对未来的用户有所帮助。