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;
    }
};
相关推荐
土司大王4 小时前
LeetCode hot100——对称二叉树
算法·leetcode·职场和发展
智恒百亿4 小时前
RTX 5090 全场景技术应用解析:从游戏算力到专业生产力落地
大数据·服务器·游戏
cd_949217215 小时前
AI纹理和Substance Painter手绘纹理哪个更适合游戏资产制作?
人工智能·游戏·substance painter
sali-tec5 小时前
C# 基于OpenCv的视觉工作流-章106-差值追踪
图像处理·人工智能·opencv·算法·计算机视觉
Navigator_Z5 小时前
LeetCode //C - 1208. Get Equal Substrings Within Budget
c语言·算法·leetcode
手写码匠5 小时前
Dify 多 Agent 工具权限与安全沙箱实战:让智能体“有能力,但不越权“
人工智能·深度学习·算法·aigc
德迅云安全-上官5 小时前
游戏攻防反套路:德迅云安全游戏盾如何破解黑产的“低成本精准打击”
网络·安全·游戏
黎阳之光5 小时前
打破堆场感知黑盒:黎阳之光视频孪生,构建港口码头网格化透明管控新体系
大数据·人工智能·算法·安全·数字孪生
大模型码小白5 小时前
AI 对话流性能调优:万级消息的虚拟滚动落地
java·大数据·前端·javascript·人工智能·算法·机器学习
sel_96 小时前
【多轮对话论文导读(三)】多轮对话与Agent论文阅读笔记:用户模拟、轨迹生成与长期记忆
论文阅读·人工智能·笔记·深度学习·算法·机器学习