【每日一题】1比特与2比特字符

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.

猜你喜欢

转载自blog.csdn.net/qq9116136/article/details/80358326