给定一个字符串,仅由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);
}
}
给定一个字符串,仅由a,b,c 3种小写字母组成。的更多相关文章
- 给定一个字符串,根据字符出现频率排序--Java实现
题目描述: 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入:"tree" 输出:"eert" 解释:'e'出现两次,'r'和't' ...
- 给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。 要求:空间复杂度是O(1),且只能遍历一次字符串。
题目:给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后. 要求:空间复杂度是O(1),且 ...
- 给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。
给定两个字符串 s 和 t,它们只包含小写字母.字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母.请找出在 t 中被添加的字母. 示例: 输入: s = "abcd" ...
- 核心API的使用(给定一个字符串,统计每个字符出现的次数)
/** * 给定一个字符串,统计每个字符出现的次数. 如:abdaewrwqask435a1aasd */public class ReplaceString { static int length; ...
- 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...
- 【leetcode-03】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度
开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出 ...
- 给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换)
需求:给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换) 如: a 不替换 b 不替换 ab 不替换 ba 不替换 aba 不替换 aab 替换为 ...
- 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,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, 字符串内的其他字 ...
- 算法:Manacher,给定一个字符串str,返回str中最长回文子串的长度。
[题目] 给定一个字符串str,返回str中最长回文子串的长度 [举例] str="123", 1 str="abc1234321ab" 7 [暴力破解] 从左 ...
随机推荐
- SPOJ 962 Intergalactic Map (从A到B再到C的路线)
[题意]在一个无向图中,一个人要从A点赶往B点,之后再赶往C点,且要求中途不能多次经过同一个点.问是否存在这样的路线.(3 <= N <= 30011, 1 <= M <= 5 ...
- POJ 3281 Dining (网络流构图)
[题意]有F种食物和D种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一种食物和一种饮料.现在有N头牛,每头牛都有自己喜欢的食物种类列表和饮料种类列表,问最多能使几头牛同时享用到自己喜欢的食物和 ...
- CentOS 7 安装 mariaDB
1.安装数据库 [root@localhost ~]# yum -y install mariadb-server mariadb mariadb-devel 2.启动数据库[root@localh ...
- Js计算-当月每周有多少天
查看Demo: 源代码如下: <script> //计算当月总天数 function getCountDays() { var curDate = new Date(); /* 获取当前月 ...
- HDU 3533 Escape BFS搜索
题意:懒得说了 分析:开个no[100][100][1000]的bool类型的数组就行了,没啥可说的 #include <iostream> #include <cstdio> ...
- 树-伸展树(Splay Tree)
伸展树概念 伸展树(Splay Tree)是一种二叉排序树,它能在O(log n)内完成插入.查找和删除操作.它由Daniel Sleator和Robert Tarjan创造. (01) 伸展树属于二 ...
- Cppcheck代码分析(2)
功能 解析函数中的可能的代码执行流 函数实际执行中只会执行代码流中的一条流 分析: 分支语句 if-else ,switch-case 循环语句 while, do-while ,for 代码流举例 ...
- Harris 角点检测
一 .Motivation 对于做图像处理的人来说,Harris角点检测肯定听过,1988年发表的文章"A combined corner and edge detector"描述 ...
- English Morphology
最近参与一个小project,需要编写一个针对英文单词的stem 算法. 1. 最为常见的stem 算法 就是The English (Porter2) stemming algorithm http ...
- HW7.5
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...