Skip to content

Latest commit

 

History

History
28 lines (26 loc) · 1.05 KB

File metadata and controls

28 lines (26 loc) · 1.05 KB
class Solution {
     /**
     * dp【i】【j】表示当前状态是key的第i个字符,并且ring的第j个字符处于最上方
     * dp[i][j] = Math.min(dp[i][j], step + dp[i+1][k]);
     * dp[i][j]值表示走了多少步,没什么实际意义
     * 从后往前遍历一遍,最后得出dp[0][0]的值,dp[0][0]也就是最初的状态
     */
    public int findRotateSteps(String ring, String key) {
        int[][] dp = new int[key.length() + 1][ring.length()];

        for (int i = key.length() - 1; i >= 0; i--){
            for (int j = ring.length()-1; j >= 0; j--){
                dp[i][j] = Integer.MAX_VALUE;
                for (int k = 0; k < ring.length(); k++){
                    if (key.charAt(i) == ring.charAt(k)){
                        int diff = Math.abs(j - k);
                        int step = Math.min(diff, ring.length() - diff);
                        dp[i][j] = Math.min(dp[i][j], step + dp[i+1][k]);
                    }
                }
            }
        }

        return dp[0][0] + key.length();
    }
}