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. js不能执行,IE处理方法

    一.如果你的ie不能打开js脚本(连系统里所有的js文件都不运行,网页上的js广告或好多页面都显示不了),请按一下步骤进行排查与解决: 1.查看是否IE的安全里面禁止了JS的运行: 将工具=>i ...

  2. APIO2010特别行动队(单调队列、斜率优化)

    其实这题一看知道应该是DP,再一看数据范围肯定就是单调队列了. 不过我还不太懂神马单调队列.斜率优化…… 附上天牛的题解:http://www.cnblogs.com/neverforget/arch ...

  3. [.NET WebAPI系列02] WebAPI 中的HTTP通信

    [前言] 本节用于承上启下,通过第一节了解的WebAPI的基本语法,Controller CRUD方法的基本格式: 但很多场合,第一节中的Web API Controller方法返回的信息 过于简单, ...

  4. Zepto picLazyLoad Plugin,图片懒加载的Zepto插件

    嗯,学着国外人起名字Zepto picLazyLoad Plugin确实看起来高大上,其实js代码没几句,而且我每次写js都捉襟见肘,泪奔--- 图片懒加载有很多js插件,非常著名的属jQuery的L ...

  5. 【JS】打印Excel——ActiveX控件

    function viewToExcel(){ var filepath = "f:\\PrinterExcel.xls"; var xlApp; var xlBook; var ...

  6. uva11992-Fast Matrix Operations(区间增值、改值)

    题意: r行c列的全0矩阵   有三种操作 1 x1 y1 x2 y2 v子矩阵(x1,y1,x2,y2)所有元素增加v 2 x1 y1 x2 y2 v子矩阵(x1,y1,x2,y2)所有元素设为v ...

  7. NBUT1457 Sona 莫队算法

    由于10^9很大,所以先离散化一下,把给你的这一段数哈希 时间复杂度O(nlogn) 然后就是分块莫队 已知[L,R],由于事先的离散化,可以在O(1)的的时间更新[l+1,r],[l,r+1],[l ...

  8. QTP检查点和参数化_百度一下

    一.脚本编辑检查点: Browser("百度知道 - 全球最大中文互动问答平台").Page("百度知道 - 全球最大中文互动问答平台").WebEdit(&q ...

  9. Unix 基础IO

    内核通过文件描述符引用打开的文件,通常通过open函数或者create函数返回文件描述符. 基本函数: unix中基础的文件操作函数只有5个,分别是open,close,lseek,read,writ ...

  10. Java学习笔记(1)

    封装基本原则之一: 将实例变量标记为private,将getters与setters标记为public,用setters来检查参数并判断是否可以执行: 局部变量与实例变量的区别: 你无需初始实例变量, ...