问题描述:

Given a string consisting of a,b and c's, we can perform the following operation: Take any two adjacent distinct characters and replace it with the third character. For example, if 'a' and 'c' are adjacent, they can replaced with 'b'. What is the smallest string which can result by applying this operation repeatedly?

For example, you can either get cab -> cc or cab -> bb, resulting in a string of length 2.

For the second case, one optimal solution is: bcab -> aab -> ac -> b. No more operations can be applied and the resultant string has length 1.

翻译:

字符串中任意两个相邻的不同字符都可以替换为第三种字符,问你一个字符串被多次替换后可以剩下的最短长度为多少.

解答:

分为三种情况:
1. 如果字符串中字符全部一样,那么直接返回该字符串的长度即可.
2. 如果三种字符的个数都是奇数或者都是偶数,那么答案为2
3. 其他情况,返回1.

正确性证明:

(数学归纳法),N表示字符串的长度
首先,N=3的时候.如果字符都相同,返回3;如果都不同返回2,其他情况返回1.
其次,当N>3的时候,如果字符串中字符不是全部相同的话,我们可以利用替换法则获得长度为N-1的串,且该串也不是由相同字符组成的
还有一个规律,那就是字符个数全为奇数的串经过转换就变成字符个数全为偶数的串,反之亦然。

http://www.cnblogs.com/xubenben/archive/2013/11/02/3403829.htm

String Reduction相关推荐

  1. String Reduction问题分析

    问题描述: Given a string consisting of a,b and c's, we can perform the following operation: Take any two ...

  2. fraction在java_Fraction.java

    package t1; public class Fraction { private int numerator;// 分子 private int denominator;// 分母 privat ...

  3. 四则运算题目生成程序(基于控制台)

    基于控制台的四则运算 代码地址 a.需求分析 运算符为 +, −, ×, ÷ 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24 要求能处理用户输入的真分数, ...

  4. 单元测试——(王婧201421123065,陈艺菡201421123068)

    (王婧201421123065,陈艺菡201421123068) coding.net 地址:https://git.coding.net/xmcyh1996/UnitTest.git a. 需求分析 ...

  5. 编译原理实验:自下而上语法分析

    编译原理实验:自下而上语法分析 1. 实验题目:自下而上语法分析 实验目的 实验内容 实验要求 输入输出 2. 设计思想 3. 算法流程 4. 源程序 5. 调试数据 1. 实验题目:自下而上语法分析 ...

  6. 当前进度,已学算法,未做题目

    当前学习 CSP-S备战中 已学算法 从初一开始算起,按照时间顺序排序 算法简称 算法全称 备注 无 高精度 比较基础的算法 d e p t h f i r s t s e a r c h ( D F ...

  7. Java知识——精华总结

    Java知识--精华总结 一.java概述与基础知识 1.何为编程? 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程. 为了使计算机能够理解人的意图,人类就必须 ...

  8. 如何检查字符串是否包含特定的单词? [英]How do I check if a string contains a specific word?

    Consider: 考虑: $a = 'How are you?';if ($a contains 'are')echo 'true'; Suppose I have the code above, ...

  9. C++运算符重载典型习题---复数类 String类 分数类

    一.复数类(Complex class) complex.cpp: /***************************************************** copyright ( ...

最新文章

  1. opencv Mat 函数--CheckVector
  2. Java基础学习_01 概述及环境配置
  3. Docker 使用Dockerfile构建tomcat镜像
  4. 和牛奶太多量竟然会发胖~
  5. 格式化输出,运算符,编码,字符串(索引,切片,大小写转换等等)
  6. modelsim(1):经常使用的测试设计的结构
  7. 点击area不出现黑框_30款厨房门,黑框?白框?你家选哪个合适?
  8. 估计很多前端都没学过单元测试~
  9. 在此之前的软件系统做开发—需求的研究框架
  10. 数据分块加载——BigPipe 技术【类似facebook】
  11. Python基础入门6_文件和异常
  12. 空间注意力机制sam_自己挖坑自己填,谷歌大改Transformer注意力,速度、内存利用率都提上去了...
  13. 一个简单的EXCEL 导入SQL 的例子
  14. abstract class和interface
  15. oracle erp atp是什么意思,三种ATP(ERP原理与应用教程第2版)
  16. async function
  17. 利用MS模拟天然气(甲烷)在多孔介质中的吸附
  18. AI明星上市受阻,是继续融资还是割肉?
  19. wp10手机不能连接微软服务器,WP10手机微软账户登陆不了该怎么办?
  20. 双击进入共享计算机时提示无法访问错误(连接共享打印机)

热门文章

  1. 东方证券首席架构师樊建:企业微服务架构转型实践
  2. 舆情热点产生的背景及原因
  3. 虚机安装Linux网络配置的一些笔记(隔离,桥接,NAT)
  4. ZOJ 3587 Marlon#39;s String 扩展KMP
  5. git 更换仓库地址
  6. 流媒体之色彩转换——RGB(X)与YUV之间转换
  7. terminal的常用快捷键
  8. 接口自动化框架查询手机号归属地
  9. matlab机器人工具箱学习笔记——ikine函数
  10. easyUI FileBox(文件框)的setValue不能用,回显文件名称则可以用prompt代替