每日一题 111111

每日一题

问题
有两种特殊字符:第一种字符可以用一比特 0 表示,第二种字符可以用两比特(10 或 11)表示。现给定一个以 0 结尾的二进制数组 bits,请判断数组的最后一个字符是否为一比特字符。

输入格式:一行由空格隔开的整数(仅包含 0 和 1),以 0 结尾。
输出格式:若最后一个字符是一比特字符,输出 TRUE,否则输出 FALSE。

答案
根据输入数组的不同,输出 TRUE 或 FALSE。
示例:

  • 输入 1 1 1 0 → FALSE
  • 输入 1 0 0 → TRUE

Tips

  • 解码规则是确定的:遇到 1 时必须与后一位组成两比特字符(10 或 11),遇到 0 时单独作为一比特字符。
  • 解题时只需从数组开头线性扫描:若当前位为 1,则指针向后移动 2 位(消耗一个两比特字符);若当前位为 0,则指针向后移动 1 位(消耗一个一比特字符)。
  • 扫描结束后,若指针恰好落在数组最后一个位置(即最后一位被当作独立的一比特字符解析),则输出 TRUE;否则输出 FALSE。
  • 由于数组保证以 0 结尾,最后一位一定为 0,因此只需判断最后一位是否被两比特字符“吞掉”。

延伸思考
本题本质上是一道简单的状态机或贪心扫描问题。虽然数据规模不大,但掌握这种“按规则消耗”的思路对理解更复杂的字符解码、协议解析等问题很有帮助。在实际面试中,也常被用作考察逻辑思维和边界处理的入门题。

这是一个前缀码编码方式,可以参考哈夫曼树