取东西算法

/*

 * 一个字符串, A,B两个人轮流来取走一个字符,如果取走一个后
 * 剩下的字符串是从小到大排列(ascii顺序),认为那个人获胜。
 * 给定一个字符串, 问A是否可以获胜

*/

package com.test;



public class CharactorCount {

static boolean[][] process = null; 

/**
* @param str
* @return
*/
public static boolean countPority(String str) {

boolean[] exist = new boolean[str.length()];
for(int i = 0; i < exist.length; i++) {
exist[i] = true;
}

process = new boolean[str.length()][];
for(int i = 0; i < exist.length; i++) {
process[i] = new boolean[str.length()];
}

boolean bSucc = startDecrease(str, exist);
if(bSucc) {
System.out.println("first success");
for(int i = 0; i < process.length; i++) {
String str1 = "";
for(int j = 0; j < process[i].length; j++) {
str1 += " " + process[i][j];
}
System.out.println(str1);
}

}else {
System.out.println("second success");
}

return true;
}


public static boolean startDecrease(String str, boolean[] exist) {
boolean bResult;
for(int i = 0; i < str.length(); i++) {
if(exist[i]) {
exist[i] = false;
if(getSuccess(str, exist)) {
//记录一下
addRecord(exist);
exist[i] = true;
addRecord(exist);
return true;
}

//进入下一轮
bResult = startDecrease(str, exist);
if(!bResult) {
//记录一下
addRecord(exist);
exist[i] = true;
addRecord(exist);
return true;
}
exist[i] = true;
}
}

return false;
}


public static void addRecord(boolean[] exist) {
int count = 0;
for(int i = 0; i < exist.length; i++) {
if(!exist[i]){
count++;
}
}

if(count > 0) {
System.arraycopy(exist, 0, process[count], 0, exist.length);
}
}

//判断是否获胜
public static boolean getSuccess(String str, boolean[] exist) {
char prevC = 0;
int i = 0;
for(i = 0; i < str.length(); i++) {
if(exist[i]) {
if(prevC < str.charAt(i)) {
prevC = str.charAt(i);
}else {
break;
}
}
}

if(i == str.length()) {
return true;
}

return false;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值