字符串 子序列 双指针 二分

牛牛的独特子序列

https://ac.nowcoder.com/acm/contest/9753/A

这手双指针堪称妙手。

class Solution {
   public:
    int Maximumlength(string x) {
        int n = x.length(), mx = 0;
        int na = 0, nb = 0, nc = 0;
        for (int i = 0; i < n; i++)
            if (x[i] == 'b') nb++;
        int L = 0, R = n - 1;
        while (L <= R) {
            while (x[L] != 'a') {
                if (x[L] == 'b') nb--;
                ++L;
            }
            while (x[R] != 'c') {
                if (x[R] == 'b') nb--;
                --R;
            }
            na++, nc++;
            mx = max(mx, min(na, min(nb, nc)) * 3);
            L++, R--;
        }
        return mx;
    }
};

另外二分写法比赛的时候没完成,非常丢人。

class Solution {
   public:
    string t = "abc";
    bool chk(int x, string s) {
        int cnt = 0, n = s.length(), p = 0;
        for (int i = 0; i < n; ++i) {
            if (s[i] == t[p]) ++cnt;
            if (cnt == x) {
                ++p, cnt = 0;
                if (p == 3) return 1;
            }
        }
        return 0;
    }
    int Maximumlength(string s) {
        int L = 0, R = s.length() / 3, ans = 0;
        while (L <= R) {
            int mid = L + R >> 1;
            if (chk(mid, s)) {
                ans = mid;
                L = mid + 1;
            } else {
                R = mid - 1;
            }
        }
        return ans * 3;
    }
};
算法竞赛之路 文章被收录于专栏

整理、记录算法竞赛的好题

全部评论

相关推荐

机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
06-25 09:33
厦门大学 Java
程序员饺子:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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