给定一个字符串,仅由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 [暴力破解] 从左 ...
随机推荐
- javascript 一些需要知道的东西
这里我直接贴出代码,注释已经补全,欢迎指正: <script type="text/javascript"> /** 1,js中一切皆是对象,函数也是, 2,当定义变量 ...
- (转)MySQL数据库引擎ISAM MyISAM HEAP InnoDB的区别
转自:http://blog.csdn.net/nightelve/article/details/16895917 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...
- Android学习系列(20)--App数据格式之解析Json
JSON数据格式,在Android中被广泛运用于客户端和网络(或者说服务器)通信,非常有必要系统的了解学习. 恰逢本人最近对json做了一个简单的学习,特此总结一下,以飨各位. 为了文 ...
- HDU 5699 货物运输 二分判定
转自:http://blog.csdn.net/jtjy568805874/article/details/51480479 #include <cstdio> #include < ...
- HDU 3085 Nightmare Ⅱ 双向BFS
题意:很好理解,然后注意几点,男的可以一秒走三步,也就是三步以内的都可以,鬼可以穿墙,但是人不可以,鬼是一次走两步 分析:我刚开始男女,鬼BFS三遍,然后最后处理答案,严重超时,然后上网看题解,发现是 ...
- ASP.NET_验证控件(class0620)
为什么使用验证控件 当需要让用户输入数据时,用户有可能输入不符合我们程序逻辑要求的信息,所以我们要对输入进行验证. 客户端验证(用户体验,减少服务器端压力) 服务器端验证(防止恶意攻击,客户端js很容 ...
- 【学习干货】给coder的10个读书建议
1.知识更新非常快,大学一毕业就已经有40%的知识过时,一年不读书80%过时,三年不读书99%过时.这就要求我们不间断阅读,每年每月每星期每天都要阅读,只有长期的阅读才能不被淘汰:也只有长期阅读,才能 ...
- Idiomatic Python手记一: average in FP way
方法一: import operator def average(*args): return reduce(operator.add, args) / len(args) if args else ...
- 【转载】linux命令行计算器bc的一个“坑”
[转载自]http://blog.chinaunix.net/uid-174325-id-3518953.html 结论:ibase,obase可以使用在不同的计算公式里,但是尽量把obase放iba ...
- Hadoop概念学习系列之URI深入(三十二)
ls / ------------------------ 这是查本地Linux上的根 hadoop fs -ls / ------------- 这是查hdfs上的根 或者, had ...