题目中说给出一个数组,里面只有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;
}
}