1. package com.boco.study;
  2. /**
  3. * 题目详情
  4. 给定一个字符串,仅由a,b,c 3种小写字母组成。
  5. 当出现连续两个不同的字母时,你可以用另外一个字母替换它,如
  6. 有ab或ba连续出现,你把它们替换为字母c;
  7. 有ac或ca连续出现时,你可以把它们替换为字母b;
  8. 有bc或cb 连续出现时,你可以把它们替换为字母a。
  9. 你可以不断反复按照这个规则进行替换,你的目标是使得最终结果所得到的字符串尽可能短,
  10. 求最终结果的最短长度。
  11. 输入:字符串。长度不超过200,仅由abc三种小写字母组成。
  12. 输出: 按照上述规则不断消除替换,所得到的字符串最短的长度。
  13. 例如:输入cab,输出2。因为我们可以把它变为bb或者变为cc。
  14. 输入bcab,输出1。尽管我们可以把它变为aab -> ac -> b,也可以把它变为bbb,
  15. 但因为前者长度更短,所以输出1。
  1. *运行结果大于3秒,悲剧!
  2. */
  1. public class Main {
  2. public static int minLength(String s){
  3. s = Main.shortString(s);
  4. System.out.println("返回的结果是:"+s);
  5. int length=s.length();
  6. System.out.println("返回的大小是:"+length);
  7. return length;
  8. }
  9.  
  10. public static String shortString(String s){
  11. System.out.println(s);
  12. String result="";
  13. int length=s.length();
  14. //String header="";
  15. //如果最后剩下两个字符。
  16. if(length==2)
  17. {
  18. //两个字符相同,无法再进行替换。
  19. if(s.charAt(0)==s.charAt(1))
  20. {
  21. return s;
  22. }else{
  23. if(s.charAt(0)=='a'&&s.charAt(1)=='b')
  24. {
  25. return "c";
  26. }else if(s.charAt(0)=='a'&&s.charAt(1)=='c'){
  27. return "b";
  28. }else if(s.charAt(0)=='b'&&s.charAt(1)=='a'){
  29. return "c";
  30. }else if(s.charAt(0)=='b'&&s.charAt(1)=='c'){
  31. return "a";
  32. }else if(s.charAt(0)=='c'&&s.charAt(1)=='a'){
  33. return "b";
  34. }else if(s.charAt(0)=='c'&&s.charAt(1)=='b'){
  35. return "a";
  36. }
  37. }
  38.  
  39. }else if(length==1)
  40. {
  41. return s;
  42. }else if(length>=3){
  43. if(s.charAt(0)==s.charAt(1))
  44. {
  45. // header = s.charAt(0)+"";
  46. s=s.charAt(0)+Main.shortString(s.substring(1));
  47. if(s.charAt(0)==s.charAt(1)){
  48. return s;
  49. }else{
  50. return Main.shortString(s);
  51. }
  52. }else{
  53. if(s.charAt(0)=='a'&&s.charAt(1)=='b')
  54. {
  55. return Main.shortString("c"+s.substring(2));
  56. }else if(s.charAt(0)=='a'&&s.charAt(1)=='c'){
  57. return Main.shortString("b"+s.substring(2));
  58. }else if(s.charAt(0)=='b'&&s.charAt(1)=='a'){
  59. return Main.shortString("c"+s.substring(2));
  60. }else if(s.charAt(0)=='b'&&s.charAt(1)=='c'){
  61. return Main.shortString("a"+s.substring(2));
  62. }else if(s.charAt(0)=='c'&&s.charAt(1)=='a'){
  63. return Main.shortString("b"+s.substring(2));
  64. }else if(s.charAt(0)=='c'&&s.charAt(1)=='b'){
  65. return Main.shortString("a"+s.substring(2));
  66. }
  67. }
  68. }
  69. return result;
  70. }
  71. /**
  72. * 参数:
  73. * 1.操作的字符串。
  74. * 函数内的变量:
  75. * 1.当前滞留的字符串。(准确的说是新产生的字符串)。
  76. * 2.当前操作的字符串的长度。
  77. * 操作方法:
  78. * 1.先比较下一个字符,如果不同,按照替换规则替换成新的字符串。接着执行替换函数。
  79. * 2.如果相同。保留当前位置以前的字符串,将剩下的字符串继续执行替换函数。
  80. * 3.将滞留的字符串的最后一个字符和返回的字符串进行相加,接着执行替换函数
  81. * 循环结束的条件:
  82. * 1.执行替换函数后返回的结果为1.
  83. * 2.执行替换函数后返回的结果是2,但是两个字符相等。
  84. * 返回的结果:
  85. *
  86. */
  87. public static void main(String[] args) {
  88. String string="";
  89. for(int i=0;i<200;i++)
  90. {
  91. if(i%3==0)
  92. {
  93. string+="a";
  94. }else if(i%3==1){
  95. string+="b";
  96. }else if(i%3==2){
  97. string+="c";
  98. }
  99. }
  100. Main.minLength(string);
  101. }
  102. }

给定一个字符串,仅由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. javascript 一些需要知道的东西

    这里我直接贴出代码,注释已经补全,欢迎指正: <script type="text/javascript"> /** 1,js中一切皆是对象,函数也是, 2,当定义变量 ...

  2. (转)MySQL数据库引擎ISAM MyISAM HEAP InnoDB的区别

    转自:http://blog.csdn.net/nightelve/article/details/16895917 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...

  3. Android学习系列(20)--App数据格式之解析Json

    JSON数据格式,在Android中被广泛运用于客户端和网络(或者说服务器)通信,非常有必要系统的了解学习.     恰逢本人最近对json做了一个简单的学习,特此总结一下,以飨各位.     为了文 ...

  4. HDU 5699 货物运输 二分判定

    转自:http://blog.csdn.net/jtjy568805874/article/details/51480479 #include <cstdio> #include < ...

  5. HDU 3085 Nightmare Ⅱ 双向BFS

    题意:很好理解,然后注意几点,男的可以一秒走三步,也就是三步以内的都可以,鬼可以穿墙,但是人不可以,鬼是一次走两步 分析:我刚开始男女,鬼BFS三遍,然后最后处理答案,严重超时,然后上网看题解,发现是 ...

  6. ASP.NET_验证控件(class0620)

    为什么使用验证控件 当需要让用户输入数据时,用户有可能输入不符合我们程序逻辑要求的信息,所以我们要对输入进行验证. 客户端验证(用户体验,减少服务器端压力) 服务器端验证(防止恶意攻击,客户端js很容 ...

  7. 【学习干货】给coder的10个读书建议

    1.知识更新非常快,大学一毕业就已经有40%的知识过时,一年不读书80%过时,三年不读书99%过时.这就要求我们不间断阅读,每年每月每星期每天都要阅读,只有长期的阅读才能不被淘汰:也只有长期阅读,才能 ...

  8. Idiomatic Python手记一: average in FP way

    方法一: import operator def average(*args): return reduce(operator.add, args) / len(args) if args else ...

  9. 【转载】linux命令行计算器bc的一个“坑”

    [转载自]http://blog.chinaunix.net/uid-174325-id-3518953.html 结论:ibase,obase可以使用在不同的计算公式里,但是尽量把obase放iba ...

  10. Hadoop概念学习系列之URI深入(三十二)

    ls  /   ------------------------  这是查本地Linux上的根 hadoop fs -ls /   ------------- 这是查hdfs上的根 或者,   had ...