题目描述
给出一个字符串S,你需要尽可能少的修改S中的字符,使得S不包含长度大于等于2的回文子串。
输入
输人的第一行是一个字符串S, S只包含小写字母 S的长度大于5小于300
输出
输出使得S中不包含长度大于等于2的回文,最少要修改几个字符(可以修改
成任意字符)
样例输入
abbaa
样例输出
2
分析:
六种情况,符号*和?表示通配符,
代码(Java版)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
//while(cin.hasNext()){
String str=cin.next();
System.out.println(Answer(str));
//}
}
public static int Answer(String str){
int cnt=0;
for(int i=0;i<str.length();){
if(i+1==str.length()-1&&str.charAt(i)==str.charAt(i+1)){
//*aa->*a?
++cnt;
i+=2;
continue;
}
if(i+3<str.length()){
if(str.charAt(i)!=str.charAt(i+1)&&str.charAt(i)==str.charAt(i+2)&&str.charAt(i)==str.charAt(i+3)){
//*abaa*->*ab?a*
cnt++;
i+=3;
continue;
}else if(str.charAt(i)!=str.charAt(i+1)&&str.charAt(i)==str.charAt(i+2)&&str.charAt(i+1)==str.charAt(i+3)){
//*abab*->*ab??*
cnt+=2;
i+=4;
continue;
}
}
if(i+2<str.length()){
if(str.charAt(i)==str.charAt(i+1)&&str.charAt(i+1)==str.charAt(i+2)){
//*aaa*->*a??*
cnt+=2;
i+=3;
continue;
}else if(str.charAt(i)==str.charAt(i+1)&&str.charAt(i)!=str.charAt(i+2)){
//*aab*->*a?b*
cnt++;
i+=2;
continue;
}
else if(str.charAt(i)==str.charAt(i+2)&&str.charAt(i)!=str.charAt(i+1)){
//*aba->*ab?
cnt++;
i+=3;
continue;
}
}
i++;
}
return cnt;
}
}