题解 | #第一个只出现一次的字符# 状态 / 位运算

第一个只出现一次的字符

https://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c?tpId=188&&tqId=38575&rp=1&ru=/activity/oj&qru=/ta/job-code-high-week/question-ranking

时间:O(n)
空间:O(1)

sta: 记录当前字符串的状态
flag:如果某个字符出现了两次以上,那么就记录

代码实现:

class Solution {
public:
    int FirstNotRepeatingChar(string str) {
        long long sta = 0, flag = 0;
        for(auto &c : str) {
            int x = c - 'a';
            if(sta & (1 << x)) flag |= (1 << x);     // 标记出现两次及以上的字符串
            sta |= (1 << x);
        }
        for(int i = 0; i < str.size(); i++) {
            int x = str[i] - 'a';
            if((sta & (1 << x)) && !(flag & (1 << x))) return i;     // 只出现一次的字符串
        }
        return -1;
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 14:00
不想多说了,什么逆天HR,还要教我礼貌😂
机械打工仔:这不纯傻卵吗,他还操心上别人老板了
投递BOSS直聘等公司8个岗位
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务