原文地址:https://blog.youkuaiyun.com/bin8632/article/details/50216297
在上次的文章中已经有提及,这个问题我实际上是没有完全作对的。但是嘛......我上网查了查,发现我和正确答案也就差了一点点,我也不知道我究竟错在了什么地方,可能这就是一个教训吧:应该使用原始或者接近原始条件的条件,而不是自己找一些所谓的条件。(有时候必须用推出的条件,这个时候就看这个人的数学能力如何了)
接下来是第二中解法:
public class IWantToPass1 {
public static void main(String[] args) throws Exception {
method(IWantToPass.getStringArray());
}
public static void method(String[] target) {
for (int i = 0 ; i < target.length ; i ++) {
if (judge(target[i])) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
public static boolean judge(String s) {
if (Pattern.matches("A*PA+TA*", s)) { //就像是 APAT这种的也是可以过的
if (Pattern.matches("PA+T", s)) { //这种对应的是 PAAAAAT类型的
return true;
} else { //这种情况一定是符合 A*PA+A* 但是不符合PA+T 类型的,举例子的话,APAT还是可以
String[] splitArray = s.split("P|T");
int num1, num2, num3;
num1 = splitArray[0].length();
num2 = splitArray[1].length();
num3 = splitArray[2].length();
return num3 == num1 * num2;
}
}else {
return false;
}
}
}
其中的getStringArray调用了之前文章中的方法,实际上method方法应该也是可以进行复用的,我们只需要这样写~~
public static void method(String[] target, Class targetClass, String methodName) throws Exception {
Method method = targetClass.getMethod(methodName, String.class);
for (int i = 0 ; i < target.length ; i ++) {
if ((boolean)method.invoke(null, target[i])) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
emmm实际上规范起见的话,judge方法的参数可以用一个接口来限制起来,这样的话,可能更好吧。
调用的代码变成了:
public static void main(String[] args) throws Exception {
method(IWantToPass.getStringArray(), IWantToPass1.class, "judge");
}
就这样~~
嘛....毕竟是抄的网上的东西,严格意义上不算是原创233(在文章的前后加上原文地址以表示心虚)
原文地址:https://blog.youkuaiyun.com/bin8632/article/details/50216297