请问这种题目怎么 dp 啊?

2020-04-21 15:06:08 +08:00
 Newyorkcity

https://leetcode-cn.com/problems/freedom-trail/

别的不说,就比如在前往 key[i] 时,逆时针和顺时针波动以到达的一个最近位置的花费是一样的,dp 如何表达这件事?

dfs 用过了,超时。。。

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class Solution {

    private String rring;
    private String kkey;
    private Map<Character, Set<Integer>> ringMap;
    private int ans = Integer.MAX_VALUE;

    public int findRotateSteps(String ring, String key) {
        rring = ring;
        kkey = key;
        ringMap = new HashMap<>();
        for (int i = 0; i < ring.length(); i++) {
            char c = ring.charAt(i);
            Set<Integer> set = ringMap.getOrDefault(c, new HashSet<Integer>());
            set.add(i);
            ringMap.put(c, set);
        }
        dfs(0, 0, 0);
        return ans;
    }

    public void dfs(int keyIdx, int nowIdx, int stepCounter) {
        if (keyIdx == kkey.length()) {
            ans = Math.min(ans, stepCounter);
            return;
        }
        Character ch = kkey.charAt(keyIdx);
        for (Integer nextIdx : ringMap.get(ch)) {
            dfs(keyIdx + 1, nextIdx, stepCounter + 1 + distanceCounter(nowIdx,
                    nextIdx));
        }

    }

    public int distanceCounter(int nowIdx, int nextIdx) {
        int a = Math.abs(nextIdx - nowIdx);
        int b = rring.length() - a;
        return Math.min(a, b);
    }
}

谢谢

427 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/664654

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX