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. 谈谈数据库中MyISAM与InnoDB区别

    MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与 ...

  2. 关于广义后缀树(多串SAM)的总结

    之前我们给的SAM的例题,基本上是一个串建SAM的就能做的 如果要建多个串的SAM应该怎么做呢 首先看题,bzoj2780 我一开始的想法是SA以前的弄法,把串拼起来,中间加分隔符做SAM 这题确实可 ...

  3. 西南科技大学第十届ACM程序设计竞赛题解

    A.德州扑克 B. 我恨11(1089) 问题描述 11是一个孤独的数字,小明十分讨厌这个数字,因此如果哪个数字中出现了11或者该数字是11的倍数,他同样讨厌这个数字.现在问题来了,在闭区间[L,R] ...

  4. [2015编程之美] 第一场A

    #1156 : 彩色的树 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵n个节点的树,节点编号为1, 2, …, n.树中有n - 1条边,任意两个节点间恰好有一 ...

  5. 解决angular的post请求后SpringMVC后台接收不到参数值问题的方法

    这是我后台SpringMVC控制器接收isform参数的方法,只是简单的打出它的值: @RequestMapping(method = RequestMethod.POST) @ResponseBod ...

  6. Spring中使用quartz插件实现定时任务

    第一步:导入架包 *spring3.2.3版本的架包将spring的各个功能模块给分开了,我们必须将Spring必须依赖的包导入上去 第二步:编写配置文件 <?xml version=" ...

  7. Java [leetcode 34]Search for a Range

    题目描述: Given a sorted array of integers, find the starting and ending position of a given target valu ...

  8. 如何卸载eclipse中的ADT

    卸载ADT的方法,方法如下: 1.选择 Help > Install New Software: 2.在"Details" 面板中, 点击"What is alre ...

  9. Hibernate配置文件解释

    Hibernate配置文件主要用于配置数据库连接和Hibernate运行时所需的各种属性每个Hibernate配置文件对应一个Configuration对象Hibernate配置文件可以有两种格式: ...

  10. android利用WebView实现浏览器的封装

    android提供了封装浏览器的接口,可以让开发者利用自己的view显示网页内容.今天又实现研究了一下,利用WebView显示浏览器内容,还可以利用 WebViewClient显示自己需要的内容. 参 ...