阿里笔试-3.22

本文介绍了阿里笔试中的两道题目,第一题是判断一个字符串是否为'ali'型,通过记录字符出现次数实现;第二题涉及01字符串转化为最多1的最小操作数,通过分析0的分布进行计算;第三题讨论满二叉树节点染色问题,需要考虑高效的数据结构或递归方法来解决。
摘要由CSDN通过智能技术生成

1、ALI字符串

给定一个字符串,判断是否为“ali”型字符串。
字符串满足以下条件:
字符串仅包含a、l、i三种字母, (包括大写和小写);
字符串的开头为仅包含a或者“A"的连续子串;
在该子串后面,为仅包含l或者L的连续子串;
在该子串后面,为仅包含i或者I的连续子串,该子串结束后将直接到达字符串的结尾
用例:
输入AAaLlLLiili,输出Yes;
输入aAiIlL,输出No;
输入alIali,输出No。

实现(AC)

问题看起来简单,实现方法不同的话会出现很多小问题。一开始实现的时候考虑使用三个布尔变量来记录每个字符出现与否,但实现时会发现第一次读入字符时对于布尔变量的设计会比较麻烦。而后更换成利用三个整形记录每个字符出现的次数。值得注意的是,我们仅考虑 “A” 先出现,而后 “L” 出现、“I” 出现的情况,因此若出现字符重复出现或者不出现的情况均不会记录。最终我们只需要检查是否所有变量均不为零且总长度等于字符串总长度即可。

2、修改 01 字符串

给定一个只包含01的字符串,例如0101,每次操作都只能将相邻两位数字进行取反,求找到将字符串转化为尽可能多的1的字符串的最小操作数。
用例:
输入0101,输出2。
0101——1001——1111
输入101,输出0。
无论怎么操作,字符串中最多出现两个1,因此最少次数为0。

实现(30%)

考试的时候想使用 BFS + 哈希堆去重的方法进行遍历,但一直没有写出来。考完之后看到别人的做法:

  1. 若字符串中出现 0 的个数为偶数,则肯定可以将所有 0 都转为 1 。例如 1001 中,两个 0 之间距离为 0 ,因此只需要一次操作即可全部转化为 1 。例如在 10101 中,两个 0 之间距离为 1 ,因此一共需要两个操作,即先转化为 11001 ,而后转化为 11111 。因此我们显然可以发现,我们只需要遍历字符串中所有的 0 ,而后统计其与下一个 0 之间的距离加一即为将当前两位转化为 1 的最小操作数;
  2. 若字符串中出现 0 的个数为奇数,则肯定存在一个 0 无法转化为 1 。因此我们可以遍历字符串中个每一个可能的 0 ,选择不将其转化为 0 并
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值