单词博弈Java实现(借鉴“miss若尘”博客中写的解题思路)

单词博弈Java实现

,已经通过庞果网的用例测试。

代码如下



import java.util.HashMap;
public class WordGameFinalTest 
{ 
   public static  int who(String word)
    {
        HashMap<String, Integer> hs = new HashMap<String, Integer>();
        return WordGame(word, hs);
    }
    //start 提示:自动阅卷起始唯一标识,请勿删除或增加。 
    public static void main(String args[]) 
    { 
       System.out.println(who("Test"));
    } 
    //end //提示:自动阅卷结束唯一标识,请勿删除或增加。
    
    
    
    //功能函数块
    private static int WordGame(String word, HashMap<String, Integer> has) {
        // TODO Auto-generated method stub
    	
    	//要求是小写,不大于15位的英文字母,word的前提不用判断,
    	//因为题目中没有说需要抛出异常,没有第三种出口,所以不用考虑
    	
    	
    	//不用加入到容器中,是因为此次判断仅需一步
    	//不用再将length为2的word加入容器中。不用再去容器中匹配,而直接判断就可以
        if (word.length() <= 2)
            return 1;

        //去容器中找。递归时会把已经做过测试的字符串加入Map中
        if (has.containsKey(word)) {
            if (has.get(word) == 0)
            {   //System.out.println(word+"0");
                return 0;}
            else{
                //System.out.println(word+"1");
                return 1;
            }
        }

        if (word.length() == 3) {
        	//长度为三的情况。
            if (!(word.charAt(0) < word.charAt(1) || word.charAt(1) < word
                    .charAt(2))) {
            	
                has.put(word, 0);
                return 0;
            }

            else {
                has.put(word, 1);
                return 1;
            }

        }

        //一个一个删,看剩的是不是严格单调递增
        for (int i = 0; i < word.length(); i++) {
            String snew = new String(word.substring(0, i)
                    + word.substring(i + 1));
            if (isOrdered(snew)) {
                has.put(word, 1);
                return 1;
            }
        }

        
        //如果还没有判断出来,就得继续下面代码了
        //下面代码才是递归,这个题的核心
        for (int i = 0; i < word.length(); i++) {
            String snew = new String(word.substring(0, i)
                    + word.substring(i + 1));
            
            //递归,如果WordGame(snew, has)==0 /他输的意思/ 你就赢了
            if (WordGame(snew, has) == 0) {
            	
                has.put(word, 1);
                return 1;
            }
        }

        //如果还没判断出来,表示你输了。
        has.put(word, 0);
        return 0;

    }

    
    //判断s是否是严格单调递增的函数
    public static boolean isOrdered(String s) {

        // if(con.contains(s) ) return true;

        for (int i = 0; i < s.length() - 1; i++) {
            if (s.charAt(i) >= s.charAt(i + 1)) {
                return false;
            }
        }

        return true;
    }
}

通过了,开心得不得了。





评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值