给定一个字符串,仅由a,b,c 3种小写字母组成。
2013-08-30 00:15
411 查看
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); } }
相关文章推荐
- 给定一个字符串,仅由a,b,c 3种小写字母组成。
- 谷歌:有一个由大小写组成的字符串,将其中的所有小写字母排在大写字母的前面
- 字典序问题。在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A由26个小写字母组成。该字母表产生的升序字符串中字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1
- 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
- 华为上机笔试之通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
- 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉
- 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。 比如字符串“abacacde”过滤结果为“abcde”。
- 字典序问题。在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A由26个小写字母组成。该字母表产生的升序字符串中字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1
- 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。 压缩规则: 1、仅压缩连续重复出现的字符。比如字符串"abcbc
- 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
- 传入一个字符串,已知字符串只由字母组成,将其中的大写字母转换为小写,小写转换为大写,返回转换后的字符串
- 一个只由字母数字字符和破折号组成的字符串S. 该字符串被N个破折号分成N + 1个组。 给定数字K,使得每个组包含完全K个字符,除了第一个组可能少于K
- 空格替换 请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。 给定一
- 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。 比如字符串“abacacde”过滤结果为“abcde”。 要求实现函
- 对于给定的一个字符串,统计其中数字字符出现的次数。输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。
- 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
- 请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。 给定一个string
- 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
- 17、有一个由大小写组成的字符串,现在需要对他进行修改, 将其中的所有小写字母排在答谢字母的前面(大写或小写字母之间不要求保持原来次序)
- 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。