/*
* 一个字符串, 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;
}
}