提交时间:2019-12-21 15:12:11
运行 ID: 3723
public class FindMinLength { public static void main(String[] args) throws IOException { while(true){ System.out.print("请输入要验证的字符串(仅包含a,b,c) : "); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String bigStr = br.readLine(); if("end".endsWith(bigStr) && bigStr.length() == 0){ System.out.println("结束!"); break; }else{ System.out.println(bigStr + "循环消除后最小长度为" + minLength(bigStr) +"\n"); } } } //找出字符串中循环消除最小长度 public static int minLength(String bigStr){ //定义集合装载最小不可消除单位(当最小长度为1视为可消除,而最小不可消除字符串取三个不同的组合) String smallStr[] = {"abc","acb","bca","bac","cab","cba"}; //判断原字符串是否全部字符相同 String newStr = bigStr.replaceAll(bigStr.substring(0, 1), ""); //如果全部相同则直接返回字符串长度 if(newStr.length() == 0){ return bigStr.length(); }else{ for(int i = 0;i < 6;i++){ //循环消除匹配的最小不可消除字符串 if(clean(bigStr,smallStr[i])){ bigStr = bigStr.replaceAll(smallStr[i], ""); } } int nowLen = bigStr.length(); //如果正好匹配掉所有字符串,则视为最小不可消除情况,最小长度为2 if(nowLen == 0){ return 2; } //判断消除过后的字符串是否全部字符相同 String overStr = bigStr.replaceAll(bigStr.substring(0, 1), ""); int overLen = overStr.length(); //当剩余字符串是2的倍数且全部相等的时候,则视为最小不可消除情况,最小长度为2 if(nowLen%2==0 && overLen == 0){ return 2; } } return 1; } //判断bigStr中是否包含smallStr 有:返回true 无:返回false public static boolean clean(String bigStr,String smallStr){ return bigStr.contains(smallStr); }