LeetCode刷题之717. 1比特与2比特字符
我不知道将去向何方,但我已在路上! |
---|
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 ! |
- 题目:
有两种特殊字符。第一种字符可以用一比特0
来表示。第二种字符可以用两比特(10
或 11
)来表示。
现给一个由若干比特组成的字符串。问最后一个字符是否必定为一个一比特字符。给定的字符串总是由0
结束。 - 示例:
示例 1 :
输入:
bits = [1, 0, 0]
输出: True
解释:
唯一的编码方式是一个两比特字符和一个一比特字符。所以最后一个字符是一比特字符。
示例 2 :
输入:
bits = [1, 1, 1, 0]
输出: False
解释:
唯一的编码方式是两比特字符和两比特字符。所以最后一个字符不是一比特字符。
- 注意:
1 <= len(bits) <= 1000
.bits[i]
总是0
或 1
.
- 代码1:
class Solution:
def isOneBitCharacter(self, bits: List[int]) -> bool:
bits.pop(-1)
while bits != []:
if len(bits) == 1 and bits[0] == 1:
return False
if bits[0] == 1:
bits.pop(0)
bits.pop(0)
continue
if bits[0] == 0:
bits.pop(0)
return True
- 算法说明:
将最后一个字符0
先出栈,然后处理剩余的字符;根据题目条件,如果当前字符是0
的话,只能单独出栈,如果当前字符是1
,只能和下一个字符一起出栈。具体执行如下:
如果只剩下1个字符,而且是1
,无法出栈,说明最后一个元素不能是一比特,返回False
;如果当前元素是1
,连续出栈两次;如果当前元素是0
,出栈一次。如果bits
为空,退出while
循环,返回True。