我正在看godel escher bach的MU谜题,我正在尝试实施一套规则。
规则是
规则1:如果你的字符串以I结尾,你可以在结尾添加一个U:x I→x IU
规则2:如果字符串以M开头,则可以将M之后的内容加倍:M x→M x x
规则3:如果字符串中有III,则可以用U:x III y→x U y替换它
规则4:如果你在一个字符串中有UU,你可以完全删除它:x UU y→x y
我从所有这些规则中得到了结果,但我不相信我的规则3的代码有效。
我的字符串输入是“MIIII”
我得到输出:[MIIIIU,MIIIIIIII,MUI,MIU]
我正在寻找的输出。
但是我相信我编码它的方式并没有正确地替换U.
我认为如果我的输入是“MIIIIII”我相信我应该得到结果MUU请纠正我,如果我错了。
但是我的代码返回MU,因为我使用split并在字符串中添加一个U,但是当我认为它应该返回两个U时,它会将所有6个I替换为U.
此规则的代码是
if(s.contains ("III")){
String parts[] = s.split("III");// split at III and handle empty string
String x = parts[0]; // Prefix;
String y = parts[1]; //suffix
list.add(x+"U"+y);
list.add(x+y+"U");
}
}
任何关于如何更好地解决这个问题的建议都将不胜感激。
由于