488. 祖玛游戏

文章目录

题意

题目链接

思路

dfs

代码

C++ 复制代码
class Solution {
public:
    string exchange(string tmp) {
        bool next = false;
        do{
            next = false;
            for (int l = 0, r = 0; l < tmp.size() && r < tmp.size(); l++) {
                r = l + 1;
                while (r < tmp.size() && tmp[l] == tmp[r] )
                    r++;
                if (r - l >= 3) {
                    tmp.erase(l, r - l);
                    next = true;
                    break;
                }
            }
        } while (next);
        return tmp;
    }
    int findMinStep(string board, string hand) {
        queue<pair<string, string>> Q;
        sort(hand.begin(), hand.end());
        Q.push(make_pair(board, hand));
        unordered_set<string> s;
        s.insert(board + "|" + hand);
        int step = 1;
        while (!Q.empty()) {
            int n = Q.size();
            for (int i = 0; i < n; i++) {
                const auto &index = Q.front();
                const string b = index.first;
                const string h = index.second;
                Q.pop();

                for (int j = 0; j < h.size(); j++) {
                    if (j > 0 && h[j] == h[j - 1])
                        continue;
                    for (int k = 0; k <= b.size(); k++) {
                        if (k > 0 && h[j] == b[k] && b[k] == b[k - 1])
                            continue;
                        if (!(k < b.size() && h[j] == b[k] || (k >= 1 && b[k - 1] == b[k])))
                            continue;
                        string c(1, h[j]);
                        string b_tmp = b.substr(0, k) + c + b.substr(k);
                        string b_next = exchange(b_tmp);
                        if (b_next == "")
                            return step;
                        string h_next = h.substr(0, j) + h.substr(j + 1);
                        string key = b_next + "|" + h_next;
                        if (s.find(key) == s.end()) {
                            Q.push(make_pair(b_next, h_next));
                            s.insert(key);
                        }
                    }
                }
            }
            step++;
        }
        return - 1;
    }
};
相关推荐
景熙552316 分钟前
14.Java 集合框架从入门到源码万字详解(含 ArrayList/LinkedList/HashMap 源码、泛型通配符、红黑树)
java·开发语言·数据结构·算法
aaaameliaaa25 分钟前
结构体 结构体
c语言·笔记·算法
有Li1 小时前
【AI答疑】MR数据预处理步骤
人工智能·笔记·算法·语言模型·医学生
盛世宏博北京2 小时前
多传感器数据融合算法:实现档案库房温湿度全域无死角监测
算法·档案温湿度
AgentMaster2 小时前
零售行业智能客服系统怎么选?3 大场景落地与 4 款平台对比实践
大数据·人工智能·算法
远航计算机3 小时前
客服记录怎么变成 AI 会引用的内容?五步清洗法
大数据·人工智能·算法·aigc
码流子3 小时前
几万路监控怎么接:高速公路视频汇聚平台的架构设计与落地坑点
大数据·人工智能·物联网·算法·架构
万物智能3 小时前
PWM散热风扇设置—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
前端·后端·算法
北极有牛4 小时前
cuda算子--矩阵转置
人工智能·算法
程序猫.4 小时前
算法刷题笔记:模拟题从入门到实战(含 LeetCode 例题与习题)
java·数据结构·算法