动态规划——Freedom Trail

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

额。。。不解释大意了,题目我也不想写过程了有点繁琐,直接给出代码:

 1 public int findRotateSteps(String ring, String key) {
 2         int rlen = ring.length();
 3         int klen = key.length();
 4         int[][]dp = new int[klen+1][rlen+1];
 5         int temp = 0,step = 0,diff = 0;
 6         for(int i = 0;i<=klen;i++) {
 7             for(int j = 1;j<=rlen;j++)
 8                 if(i==0)dp[i][j] = 0;
 9                 else dp[i][j] = Integer.MAX_VALUE;
10         }
11         for(int i = 1;i<=klen;i++) {
12             for(int j = 1;j<=rlen;j++) {
13                 temp = Integer.MAX_VALUE;
14                 if(ring.charAt(j-1)==key.charAt(i-1)) {
15                     if(i==1)temp = Math.min(j-1,rlen+1-j);
16                     else {
17                         for(int k = 1;k<=rlen;k++)
18                             if(dp[i-1][k]!=Integer.MAX_VALUE) {
19                                 diff = Math.abs(j-k);
20                                 step = Math.min(diff,rlen-diff);
21                                 temp = Math.min(temp,step+dp[i-1][k]);
22                             }
23                     }
24                 }
25                 dp[i][j] = temp;
26             }
27         }
28         /*
29         for(int i = 1;i<=klen;i++) {
30             for(int j = 1;j<=rlen;j++)
31                 System.out.print(dp[i][j]+" ");
32             System.out.println();
33         }*/
34         int ans = dp[klen][1];
35         for(int i = 2;i<=rlen;i++) {
36             ans = ans < dp[klen][i]?ans:dp[klen][i];
37         }
38         return ans+klen;
39     }

猜你喜欢

转载自www.cnblogs.com/messi2017/p/9943694.html
今日推荐