题目来源:字符消除
解题思路:
1、在给定字符串中的任意位置插入’A’、’B’、’C’中的任意一个字符,然后计算插入后的字符经过消除后最短的字符串长度;
2、在计算字符消除后最短长度时,智能一遍一遍的计算,个人没有想出什么更好地方法
3、记录每次插入一个字符后经过第2步计算后最短的字符串长度min,最后原字符串的长度-min+1。
具体算法(java版,可以直接AC)
—————————————————————————————-
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int time = scan.nextInt();
for(int i = 0;i < time;i++){
StringBuffer buffer = new StringBuffer(scan.next());
int min = buffer.length();
for(int j = 0;j < buffer.length();j++){
for(char ch = 'A';ch <= 'C';ch++){
StringBuffer temp = new StringBuffer(buffer);
temp = temp.insert(j, ch);
int count = handle(temp);
min = min > count ? count : min; //越来越小
}
}
System.out.println(buffer.length() + 1- min);
}
}
public static int handle(StringBuffer buffer){
int count=0;
while(true){
StringBuffer temp = new StringBuffer();
int i = 0,j = 1;
for(;j < buffer.length();j++){
if(buffer.charAt(i) != buffer.charAt(j)){
temp.append(buffer.charAt(i));
}else{
while(j < buffer.length()&& buffer.charAt(i) == buffer.charAt(j))
j++;
}
i = j;
}
if(j == buffer.length()){
temp.append(buffer.charAt(i));
}
if(buffer.length() == temp.length()){
count = temp.length();
break;
}
buffer = temp;
}
return count;
}
}
..
..
..
..