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);
}
}
谢谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.