字符串消除

题目详情:

给定一个字符串,仅由a,b,c 3种小写字母组成。当出现连续两个不同的字母时,你可以用另外一个字母替换它,如

  1. 有ab或ba连续出现,你把它们替换为字母c;

  2. 有ac或ca连续出现时,你可以把它们替换为字母b;

  3. 有bc或cb 连续出现时,你可以把它们替换为字母a。

你可以不断反复按照这个规则进行替换,你的目标是使得最终结果所得到的字符串尽可能短,求最终结果的最短长度。

输入:字符串。长度不超过200,仅由abc三种小写字母组成。

输出: 按照上述规则不断消除替换,所得到的字符串最短的长度。

例如:输入cab,输出2。因为我们可以把它变为bb或者变为cc。

输入bcab,输出1。尽管我们可以把它变为aab -> ac -> b,也可以把它变为bbb,但因为前者长度更短,所以输出1。

public class Main {public static int minLength(String s) {char[] baseArray = {'a', 'b', 'c'};char first;char second;while(true) {boolean haveDifferent = false;for(int i = 0; i < s.length() - 1; i++) {first = s.charAt(i);second = s.charAt(i+1);if(first != second) {haveDifferent = true;String oldStr = first + "" + second;String newStr = "";for(int j = 0; j < baseArray.length;j++) {if(baseArray[j] != first && baseArray[j] != second) {newStr = baseArray[j] + "";break;}}s = s.replace(oldStr, newStr);break;}}if(!haveDifferent) {break;}}char third;while(true) {boolean haveSame = false;for(int i = 0; i < s.length() - 2; i++) {first = s.charAt(i);second = s.charAt(i+1);third = s.charAt(i+2);if(first == second && second == third) {haveSame = true;String oldStr = first + "" + second + "" + third;String newStr = first + "";s = s.replace(oldStr, newStr);break;}}if(!haveSame) {break;}}return s.length();}//start 提示:自动阅卷起始唯一标识,请勿删除或增加。public static void main(String args[]){String s = "cab";System.out.println("String " +s + " , length : " + minLength(s));s = "bcab";System.out.println("String " +s + " , length : " + minLength(s));s = "cabb";System.out.println("String " +s + " , length : " + minLength(s));s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";System.out.println("String " +s + " , length : " + minLength(s));}//end //提示:自动阅卷结束唯一标识,请勿删除或增加。
};

转载于:https://blog.51cto.com/tinyking/1295183

pongo - 字符串消除相关推荐

  1. 算法:字符串消除问题的数学证明

    问题: 给定一个字符串,仅由A.B.C3个字母组成.当出现连续两个不同的字母时,你可以用另外一个字母替换它,如有AB或BA连续出现,你把它们替换为字母C:有AC或CA连续出现时,你可以把它们替换为字母 ...

  2. 【hihocoder 1039 字符串消除】模拟

    题目链接:http://hihocoder.com/problemset/problem/1039 题意:给定一个只由{A, B, C}组成的字符串s,长度为n, 故包含n+1个空隙:现要求在某个空隙 ...

  3. 庞果网---字符串消除

    题目: 给定一个字符串,仅由a,b,c 3种小写字母组成.当出现连续两个不同的字母时,你可以用另外一个字母替换它,如 有ab或ba连续出现,你把它们替换为字母c: 有ac或ca连续出现时,你可以把它们 ...

  4. 系统性能调优(5)----Java循环与字符串代码优化

    在系统性能优化的时候循环和字符串处理一直是非常值得注意的地方.从心态上我们一定不能把自己的眼界放在十次或者是百次循环的层次上,也不能把自己要处理的字符串当做是有十个二十个字符.每次遇到循环都要假定这个 ...

  5. ES6 --》字符串与数值新增方法

    目录 字符串新增方法 模板字符串 字符串对象新增方法 数值新增方法 Math数值新增方法 主要讲解了ES6中字符串与数值新增的常见的主要方法, 对其做了如下总结: 字符串新增方法 ES6对字符串新增的 ...

  6. Python字符串知识点总结

    文章目录 字符串(string) 一.字符串的创建 1.1 由单引号.双引号.三对单引号或双引号组成. 1.2 使用 str() 内置函数来定义字符串或将另一种数据类型转换为字符串 二.转义字符和原始 ...

  7. Python数据类型之字符串类型

    Python字符串类型 单行字符串 多行字符串 字符串是数组 裁切字符串 正索引 负索引 字符串方法 获取字符串长度的len()方法 删除开头和结尾空白字符的strip()方法 只删除开头的前导符的l ...

  8. 算法训练Day11|LeetCode 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

    题目链接:20. 有效的括号 第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false 第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字 ...

  9. 代码随想录第11天 | LeetCode20. 有效的括号、LeetCode1047. 删除字符串中的所有相邻重复项、LeetCode150. 逆波兰表达式求值

    day11 | LeetCode20. 有效的括号.LeetCode1047. 删除字符串中的所有相邻重复项.LeetCode150. 逆波兰表达式求值 文章目录 day11 | LeetCode20 ...

最新文章

  1. windows文件名非法字符过滤检测-正则表达式
  2. Oracle 查询基础
  3. PHP学习:字符串操作和正则表达式
  4. 地图投影系列介绍(一)----地球空间模型
  5. SmtpClient 类
  6. linux之vmlinux、vmlinuz、System.map和/proc/kallsyms简介
  7. Cadence 问题记录
  8. android锁屏自动清理,越用越快!华为P10为你锁屏自动清理后台缓存
  9. Apollo学习笔记(一):canbus模块与车辆底盘之间的CAN数据传输过程
  10. 需要计算机安装msxml,怎么在电脑上安装msxml6.0?教大家具体安装步骤
  11. Freetype字体引擎分析与指南(中文版翻译)
  12. background 组合写法_css中background复合属性详解
  13. 红帽linux7.2安装教程,RHEL 6.2安装(超级详细图解教程) | 系统运维
  14. 网易企业邮箱搬家步骤
  15. 【学习笔记VoxelMorph系列文章2】:《Unsupervised Learning for Fast Probabilistic Diffeomorphic Registration》
  16. js查询手机号码归属地
  17. uni-app常见问题以及解决方案
  18. mblock——火焰灯
  19. 学员答疑 | 投影后计算面积仍然是0?
  20. Dev c++自带小游戏

热门文章

  1. hdu5033 最大仰望角
  2. hdu2482 字典树+spfa
  3. 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | BaseDexClassLoader 构造函数 | DexPathList 构造函数及后续调用 )
  4. 【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 完整代码示例 ) ★★★
  5. 【Android 逆向】Android 权限 ( ro.product.cpu.abi 属性 | ro.zygote 属性 | dhcp.eth0 属性 | net.* 属性 )
  6. 【Flutter】Flutter 拍照示例 ( 拍照并获取照片源码示例 | image_picker 0.7.2+1 | Flutter 最新 SDK 安装 )
  7. 【计算理论】图灵机 ( 接受状态作用 | 格局 | 图灵机语言 | 图灵机设计复杂性 )
  8. PhpStrom 常用的插件
  9. hdu 2021 发工资咯:)(c语言)
  10. cf D. Powerful array 莫队算法