题目描述
有两种特殊字符。第一种字符可以用一比特0来表示。第二种字符可以用两比特(10 或 11)来表示。
现给一个由若干比特组成的字符串。问最后一个字符是否必定为一个一比特字符。
给定的字符串总是由0结束。
示例
输入: bits = [1, 0, 0]
输出: True
解释: 唯一的编码方式是一个两比特字符和一个一比特字符。所以最后一个字符是一比特字符。
输入: bits = [1, 1, 1, 0]
输出: False
解释: 唯一的编码方式是两比特字符和两比特字符。所以最后一个字符不是一比特字符。
解答
从第一位开始遍历数组,用i指示每个字符的第一位
如果字符的第一位是0,则它只能是一比特字符,下一个字符从i+1开始
如果字符的第一位是1,则它只能是两比特字符,i+1是这一字符的第二位,下一个字符从i+2开始
循环的结束条件是i<length-1,即不遍历数组最后一个元素
数组最后一个元素是0,如果它是一个一比特字符,则循环结束后i会指向它(i=length-1);若它是一个两比特字符的第二位,则循环结束后i指向它后面(i=length)
class Solution(object):
def isOneBitCharacter(self, bits):
"""
:type bits: List[int]
:rtype: bool
"""
length = len(bits)
if length==1:
return True
i = 0
# 从第一个遍历到倒数第二个,若是0,i+1;若是1,i+2
# 最后一位都是0
# 如果最后一位必须是0,则遍历完前面的,i恰好指向最后一个元素(i=length-1)
# 如果最后一位不须是0,则遍历完前面的,i指向空(i=length)
while i<(length-1):
if bits[i]==0:
i = i + 1
if bits[i]==1:
i = i + 2
if i==length-1:
return True
else:
return False