これは質問です:
問題I.
Pestaina 文字列を次のように定義します。
- ab はペステイナ文字列です。
- cbac は Pestaina 文字列です。
- S が Pestaina ストリングの場合、SaS も同様です。
- U と V が Pestaina ストリングの場合、UbV も同様です。
ここで、a、b、c は定数で、S、U、V は変数です。これらの規則では、同じ文字は同じ文字列を表します。したがって、S = ab の場合、ルール 3 により、abaab はペステイナ文字列であることがわかります。ルール 4 では、U と V はおじいちゃんの文字列を表しますが、異なる場合があります。
メソッドを書く
public static boolean isPestaina(String in)
in が Pestaina 文字列の場合は true を返し、そうでない場合は false を返します。
そして、これは私がこれまでに持っているもので、最初のルールでのみ機能しますが、「abaaab」などの機能しない場合もあります。
public class Main {
private static boolean bool = true;
public static void main(String[] args){
String pestaina = "abaaab";
System.out.println(pestaina+" "+pestainaString(pestaina));
}
public static boolean pestainaString(String p){
if(p == null || p.length() == 0 || p.length() == 3) {
return false;
}
if(p.equals("ab")) {
return true;
}
if(p.startsWith("ab")){
bool = pestainaString(p, 1);
}else{
bool = false;
}
return bool;
}
public static boolean pestainaString(String p, int sign){
String letter;
char concat;
if("".equals(p)){
return false;
}
if(p.length() < 3){
letter = p;
concat = ' ';
p = "";
pestainaString(p);
}else if(p.length() == 3 && (!"ab".equals(p.substring(0, 2)) || p.charAt(2) != 'a')){
letter = p.substring(0, 2);
concat = p.charAt(2);
p = "";
pestainaString(p);
}else{
letter = p.substring(0, 2);
concat = p.charAt(2);
pestainaString(p.substring(3));
}
if(letter.length() == 2 && concat == ' '){
if(!"ab".equals(letter.trim())){
bool = false;
//concat = 'a';
}
}else if((!"ab".equals(letter)) || (concat != 'a')){
bool = false;
}
System.out.println(letter +" " + concat);
return bool;
}
}
私が間違ったことを教えてください。