leetcode----1位和2位字符问题

题目中说给出一个数组,里面只有0和1这两种字符,现在有两种角色在里面,一种是0,另一种是10或11,要返回数组最后是否是只有一个字符,给定的数组或字符串都是以0结尾的。
例如: [1,0,0]这里面只能是10和0的组合,最后一个为单字符,所以返回true

[1,1,1,0]这里面只能是11和10的组合,所以最后是10这个组合,返回false

现在已知的是最后一位是0确定了,就是验证一下到底是一位还是两位的问题。
如果倒数第二位为0的话,不论前面是0或1,也不论字符个数为奇数还是偶数, 它最后总是一个字符,因为0可以自己作为单字符,也可以在前面与1组合。
现在只考虑剩下的一种情况,就是倒数第二位为1的话,倒数第三位为0的话,那么只能最后两位匹配,所以不是单字符,如果倒数第三位为1的话,还要看倒数第四位,如果为0,则倒数第三位与倒数第二位1匹配,可以返回最后单字符,如果倒数第四位为1,还要看倒数第五位。依次类推。

总结一下 就是从倒数第二位开始,如果为1,看遇到下一个0之前看是奇数个1还是偶数个1,如果偶数个1,则最后返回单字符,如果奇数个1,不会返回单字符。
代码:
class Solve{
public boolean isOneBitCharacter(int[] bits){
int i=bits.length-2;
while(i>=0&&bits[i]>0)
i–;
if((bits.length-2-i)%2==0)
return ture;
else
return false;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值