1比特与2比特字符
问题描述
有两种特殊字符。第一种字符可以用一比特0来表示。第二种字符可以用两比特(10 或 11)来表示。
现给一个由若干比特组成的字符串。问最后一个字符是否必定为一个一比特字符。给定的字符串总是由0结束。
示例 1:
输入:
bits = [1, 0, 0]
输出: True
解释:
唯一的编码方式是一个两比特字符和一个一比特字符。所以最后一个字符是一比特字符。
示例 2:
输入:
bits = [1, 1, 1, 0]
输出: False
解释:
唯一的编码方式是两比特字符和两比特字符。所以最后一个字符不是一比特字符。
问题解析
首先我们拿到问题分析,这一类问题肯定是考指针控制,两比特与一比特我们可以用双指针控制,一个控制第一个位一个控制后一个位,当确定是两比特时让两个指针往后走两格,要是确定是一比特的话让他走一格,当遍历这个字符串时我们可以确定最后一个是两比特还是一比特。
可是我们细细读题可以发现,两比特的第一个位都是1,也就是说要是第一个指针指向1那么第二个指针没有意义,所以我们可以只用一个指针操控即可,同时免去了万一字符串只有一个字符的尴尬。然后再给一个prev指针指向前一个状态看结束循环后prev指针指向1还是0即可,这样做时间复杂度与空间内复杂度皆为最优。
以下为代码实现:
bool isOneBitCharacter(int* bits, int bitsSize) {
int* str=bits;
int* prev;
while(str)
{
if((*str)==1)
{
prev=str;
str+=2;
}
else
{
prev=str;
str+=1;
}
}
if((*prev)==0)
{
return true;
}
return false;
}
本题源自leetcode,题目编号717.