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;
    }
};
相关推荐
wayz1115 分钟前
Momentum:PSL(心理线指标)技术指标详解
算法·金融·数据分析·量化交易·特征工程
8Qi81 小时前
LeetCode 213:打家劫舍 II(House Robber II)—— 题解 ✅
算法·leetcode·职场和发展·动态规划
三品吉他手会点灯1 小时前
C语言学习笔记 - 44.运算符和表达式 - 运算符2 - 除法与取余运算符
c语言·开发语言·笔记·算法
乐迪信息1 小时前
乐迪信息:AI算法盒子实时识别船舶烟雾与火焰异常
大数据·人工智能·算法·安全·目标跟踪
J-Tony111 小时前
【JVM】根可达算法
jvm·算法
艾iYYY2 小时前
string 类的模拟实现
android·服务器·c语言·c++·算法
Lsk_Smion2 小时前
力扣实训 _ [75].颜色分类 _ 杨辉三角
数据结构·算法·leetcode
jidaowansui3 小时前
P11375 [GESP202412 六级] 树上游走
数据结构·算法
hai3152475434 小时前
FlashAttention C语言(C++)实现(展示版)
c语言·开发语言·c++·人工智能·算法