首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

给定一个字符串,仅由a,b,c 三种小写字母组成

2013-09-05 
给定一个字符串,仅由a,b,c 3种小写字母组成。package com.boco.study/** * 题目详情给定一个字符串,仅由a,

给定一个字符串,仅由a,b,c 3种小写字母组成。

package com.boco.study;/** * 题目详情给定一个字符串,仅由a,b,c 3种小写字母组成。当出现连续两个不同的字母时,你可以用另外一个字母替换它,如 有ab或ba连续出现,你把它们替换为字母c;有ac或ca连续出现时,你可以把它们替换为字母b;有bc或cb 连续出现时,你可以把它们替换为字母a。你可以不断反复按照这个规则进行替换,你的目标是使得最终结果所得到的字符串尽可能短,求最终结果的最短长度。 输入:字符串。长度不超过200,仅由abc三种小写字母组成。 输出: 按照上述规则不断消除替换,所得到的字符串最短的长度。 例如:输入cab,输出2。因为我们可以把它变为bb或者变为cc。 输入bcab,输出1。尽管我们可以把它变为aab -> ac -> b,也可以把它变为bbb,但因为前者长度更短,所以输出1。
 *运行结果大于3秒,悲剧!  */
public class Main {      public static int minLength(String s){     s = Main.shortString(s);     System.out.println("返回的结果是:"+s);     int length=s.length();     System.out.println("返回的大小是:"+length);      return length;      }            public  static String shortString(String s){      System.out.println(s);    String result="";    int length=s.length();    //String  header="";    //如果最后剩下两个字符。      if(length==2)      {      //两个字符相同,无法再进行替换。      if(s.charAt(0)==s.charAt(1))      {      return s;      }else{      if(s.charAt(0)=='a'&&s.charAt(1)=='b')      {      return "c";      }else if(s.charAt(0)=='a'&&s.charAt(1)=='c'){      return "b";      }else if(s.charAt(0)=='b'&&s.charAt(1)=='a'){      return "c";      }else if(s.charAt(0)=='b'&&s.charAt(1)=='c'){      return "a";      }else if(s.charAt(0)=='c'&&s.charAt(1)=='a'){      return "b";      }else if(s.charAt(0)=='c'&&s.charAt(1)=='b'){      return "a";      }      }            }else if(length==1)      {      return s;      }else if(length>=3){      if(s.charAt(0)==s.charAt(1))      {     // header = s.charAt(0)+"";      s=s.charAt(0)+Main.shortString(s.substring(1));      if(s.charAt(0)==s.charAt(1)){      return s;      }else{      return Main.shortString(s);       }       }else{      if(s.charAt(0)=='a'&&s.charAt(1)=='b')      {      return Main.shortString("c"+s.substring(2));      }else if(s.charAt(0)=='a'&&s.charAt(1)=='c'){      return Main.shortString("b"+s.substring(2));      }else if(s.charAt(0)=='b'&&s.charAt(1)=='a'){      return  Main.shortString("c"+s.substring(2));      }else if(s.charAt(0)=='b'&&s.charAt(1)=='c'){      return  Main.shortString("a"+s.substring(2));      }else if(s.charAt(0)=='c'&&s.charAt(1)=='a'){      return Main.shortString("b"+s.substring(2));      }else if(s.charAt(0)=='c'&&s.charAt(1)=='b'){      return Main.shortString("a"+s.substring(2));      }      }      }    return result;    }      /**       * 参数:       * 1.操作的字符串。       * 函数内的变量:       * 1.当前滞留的字符串。(准确的说是新产生的字符串)。       * 2.当前操作的字符串的长度。       * 操作方法:       * 1.先比较下一个字符,如果不同,按照替换规则替换成新的字符串。接着执行替换函数。       * 2.如果相同。保留当前位置以前的字符串,将剩下的字符串继续执行替换函数。       * 3.将滞留的字符串的最后一个字符和返回的字符串进行相加,接着执行替换函数       * 循环结束的条件:       * 1.执行替换函数后返回的结果为1.       * 2.执行替换函数后返回的结果是2,但是两个字符相等。       * 返回的结果:       *        */      public static void main(String[] args) {String string="";for(int i=0;i<200;i++){if(i%3==0){string+="a";}else if(i%3==1){string+="b";}else if(i%3==2){string+="c";}}Main.minLength(string);}}

1楼ygrx前天 11:41
需要动态规划一下。

热点排行