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种小写字母组成。的更多相关文章

  1. 给定一个字符串,根据字符出现频率排序--Java实现

    题目描述: 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入:"tree" 输出:"eert" 解释:'e'出现两次,'r'和't' ...

  2. 给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。 要求:空间复杂度是O(1),且只能遍历一次字符串。

    题目:给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后. 要求:空间复杂度是O(1),且 ...

  3. 给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。

    给定两个字符串 s 和 t,它们只包含小写字母.字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母.请找出在 t 中被添加的字母. 示例: 输入: s = "abcd" ...

  4. 核心API的使用(给定一个字符串,统计每个字符出现的次数)

    /** * 给定一个字符串,统计每个字符出现的次数. 如:abdaewrwqask435a1aasd */public class ReplaceString { static int length; ...

  5. 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...

  6. 【leetcode-03】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度

    开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出 ...

  7. 给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换)

    需求:给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换) 如: a 不替换 b 不替换  ab 不替换 ba 不替换 aba 不替换  aab 替换为 ...

  8. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg, 字符串内的其他字符不改变,给定函数,编写函数 void Stringchang(const char*input,char*output)其中input是输入字符串,output是输出字符串

    import java.util.Scanner; /*** * 1. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg, 字符串内的其他字 ...

  9. 算法:Manacher,给定一个字符串str,返回str中最长回文子串的长度。

    [题目] 给定一个字符串str,返回str中最长回文子串的长度 [举例] str="123", 1 str="abc1234321ab" 7 [暴力破解] 从左 ...

随机推荐

  1. poj 1924 Paths on a Grid(组合数学)

    题目:http://poj.org/problem?id=1942 题意:给定一个矩形网格的长m和高n,其中m和n都是unsigned int32类型,一格代表一个单位,就是一步,求从左下角到右上角有 ...

  2. bzoj1196:[Hnoi2010]chorus 合唱队

    这数据范围明显的区间dp啊...然而据说二维会wa...那就写三维把... #include<cstdio> #include<cstring> #include<cct ...

  3. Cacti 'graph_xport.php' SQL注入漏洞

    漏洞版本: Cacti < 0.8.8b 漏洞描述: Bugtraq ID:66555 Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具. Cact ...

  4. 【转】JAVA中的反射机制

    反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧! 一,先看一下反射的概念: 主要是指程序可以访问,检测和修改它本 ...

  5. POJ 1067 取石子游戏

    题意:有两堆个数分别为a和b的石子,两个人轮流取石子,一次可以取一堆中任意个数的石子,或者在两堆中取相同个数的石子,最先没有石子可以取的人输,你先取,赢为1输为0. 解法:威佐夫博弈.看完题先找规律, ...

  6. Clear All of Them I(HDU 3920状压dp)

    题意:给有2*n个敌人的位置,枪在(0,0)位置,一次能消灭两个敌人,耗费能量为枪到一个敌人,由这个敌人再到另个敌人的的距离和,求消灭所有敌人最小耗费能量. 分析:一次枚举状态的两位即可 #inclu ...

  7. 9.19AD和DA操作

    下载芯片说明书的网站:http://www.21ic.com/ D/A digital是数字信号,analog是模拟信号,单片机属于数字芯片,内部只有0和1,这两种信息无法表示一个模拟量,如果是一个8 ...

  8. unity3d教程资源

    unity2d教程网 http://learnunity2d.com/2d-shootem-up-tutorial/ 横版射击2d游戏系列教程 http://pixelnest.io/tutorial ...

  9. 位图9宫格 BitmapSlice9.jsfl

    /** * Version 1.1, May 4: fixed issue with symbols in library folders. **/ /** * BitmapSlice9 JSFL b ...

  10. English Morphology

    最近参与一个小project,需要编写一个针对英文单词的stem 算法. 1. 最为常见的stem 算法 就是The English (Porter2) stemming algorithm http ...