有两种特殊字符。第一种字符可以用一比特0来表示。第二种字符可以用两比特(10 或 11)来表示。现给一个由若干比特组成的字符串。问最后一个字符是否必定为一个一比特字符。给定的字符串总是由0结束。
- 题目中给的字符很特殊,二字符都是1开始的,而1字符只有0,因此我们从头线性遍历,如果遇到1说明遇到两字符;
- 第一种方法,如果遇到bits[i]=1,说明两字符,i+=2;否则遇到0,i++;检查是否能到最后一个元素,并且其为0;
- 第二种方法,由于给出字符的特殊性,最后一个字符是否为一字符0,可以通过判断其左侧连续1的个数来确定,如果为奇数说明,该0为10的一部分,如果为偶数,说明该0为1字符0;
方法一:
class Solution {
public boolean isOneBitCharacter(int[] bits) {
for(int i=0;i<bits.length;i++){
if(i==bits.length-1&&bits[i]==0){
return true;
}
if(bits[i]==0){
i++;
}
else{
i+=2;
}
}
return false;
}
}
方法二
class Solution {
public boolean isOneBitCharacter(int[] bits) {
int N =bits.length;
if(bits[N-1]==1)return false;
int count =0;
for(int i=N-2;i>=0&&bits[i]==1;i--)
count++;
return (count)%2==0;
}
}