猫でもわかるWebプログラミングと副業

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

AOJ 2369: CatChecker

問題

ソースコード

  • これはソースを見てもらったほうが圧倒的に早いと思うので。
  • わかりやすく再帰で解くと一瞬で終わります。
class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        char[] c = br.readLine().toCharArray();
        int len = c.length;
        
        // 最終的に返ってきたポインタが c の長さだったら
        if(len == check(c, len, 0)) {
            System.out.println("Cat");
        } else {
            System.out.println("Rabbit");
        }
    }
    
    static int check(char[] c, int len, int pointer) {
        // 最初は必ずm
        if(c[pointer] != 'm') return -1;
        pointer++;
        
        // 次がeでない場合はそこから再帰的に
        if(c[pointer] != 'e') {
            pointer = check(c, len, pointer);
            if(pointer == -1) return -1;
        }
        pointer++;
        
        // 次がwでない場合はそこから再帰的に
        if(c[pointer] != 'w') {
            pointer = check(c, len, pointer);
            if(pointer == -1) return -1;
        }
        pointer++;
        
        // mew文字列が終わる位置を返す
        return pointer;
    }
}