zoukankan      html  css  js  c++  java
  • 给定一个字符串,仅由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);
    		}
    }
    
    
    


  • 相关阅读:
    PHP 计算页面执行时间
    PHP 实现多服务器共享 SESSION 数据
    你不了解PHP的10件事情
    智能的PHP缩图类
    php配置文件php.ini 中文版
    PclZip:强大的PHP压缩与解压缩zip类
    https 加载问题
    docker 安装sentry
    requests ssl 报错
    解决长时间计划任务rsync同步进程数过多
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3292147.html
Copyright © 2011-2022 走看看