package think;
/**
*
*给定一个字符串,仅由a,b,c3种小写字母组成。当出现连续两个不同的字母时,你可以用另外一个字母替换它,如
*有ab或ba连续出现,你把它们替换为字母c;
*有ac或ca连续出现时,你可以把它们替换为字母b;
*有bc或cb连续出现时,你可以把它们替换为字母a。
*你可以不断反复按照这个规则进行替换,你的目标是使得最终结果所得到的字符串尽可能短,求最终结果的最短长度。
*输入:字符串。长度不超过200,仅由abc三种小写字母组成。
*输出:按照上述规则不断消除替换,所得到的字符串最短的长度。
*例如:输入cab,输出2。因为我们可以把它变为bb或者变为cc。
*输入bcab,输出1。尽管我们可以把它变为aab->ac->b,也可以把它变为bbb,但因为前者长度更短,所以输出1。
*@author13061494
*
*/
public class StringThink1 {
public static void main(String[] args) {
System.out.println(minLength("bbaa"));
}
public static int minLength(String s){
int minLength = 0;
int length = s.length();
//如果字符串的长度为1则返回1
if (length == 1){
return 1;
}
String temp ="";
String left="";
String comLeft="";
String comRigth="";
int i =0;
while (i+2<=s.length()){
comLeft = s.substring(i,i+1);
comRigth = s.substring(i+1,i+2);
if (comLeft.equals(comRigth)){
i ++;
continue;
}else {
temp = comLeft+comRigth;
if (temp.indexOf("a")>-1 && temp.indexOf("b")>-1){
temp = "c";
}
else if (temp.indexOf("a")>-1 && temp.indexOf("c")>-1 ){
temp = "b";
}
else if (temp.indexOf("b")>-1 && temp.indexOf("c")>-1 ){
temp = "a";
}
if (i != 0){
s = temp + s.substring(i+2);
}else {
s = s.substring(0,i) + temp + s.substring(i+2);
}
}
}
return s.length();
}
}