努橙刷题编

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

 

public class Solution {
    // dp[i][j] - min cost for spelling key.substring(j, key.length), when i-th character of the ring is at 12 o clock
    // dp[i][j] = Min(dp[k][j + 1] + distance(i, k)), if ring[k] == key[j]
    // dp[i][key.length] = 0, 0 <= i <= ring.length
    // result: dp[0][0]
    public int findRotateSteps(String ring, String key) {
        int[][] dp = new int[ring.length()][key.length() + 1];
        
        for (int j = key.length() - 1; j >= 0; j--) {
            for (int i = 0; i < ring.length(); i++) {
                dp[i][j] = Integer.MAX_VALUE;
                for (int k = 0; k < ring.length(); k++) {
                    if (ring.charAt(k) == key.charAt(j)) {
                        int distance = Math.abs(i - k);
                        int step = Math.min(distance, ring.length() - distance);
                        dp[i][j] = Math.min(dp[i][j], step + dp[k][j + 1]);
                    }
                }
            }
        }
        
        return dp[0][0] + key.length();
    }
}

 

posted on 2017-05-19 11:03  努橙  阅读(195)  评论(0编辑  收藏  举报