高级农民
- 积分
- 1027
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-6-3
- 最后登录
- 1970-1-1
|
用dp写了一下,欢迎讨论~- <font size="1"> <span style="color: rgb(204, 120, 50);">public </span>String <span style="color: rgb(255, 198, 109);">findShortest</span>(String a<span style="color: rgb(204, 120, 50);">, </span>String b){
- <span style="color: rgb(204, 120, 50);">if</span>(a==<span style="color: rgb(204, 120, 50);">null </span>|| b==<span style="color: rgb(204, 120, 50);">null </span>|| a.length()==<span style="color: rgb(104, 151, 187);">0 </span>|| b.length()==<span style="color: rgb(104, 151, 187);">0</span>) <span style="color: rgb(204, 120, 50);">throw new </span>IllegalArgumentException()<span style="color: rgb(204, 120, 50);">;
- </span><span style="color: rgb(204, 120, 50);">
- </span><span style="color: rgb(204, 120, 50);"> int </span>lena = a.length()<span style="color: rgb(204, 120, 50);">, </span>lenb = b.length()<span style="color: rgb(204, 120, 50);">;
- </span><span style="color: rgb(204, 120, 50);"> int</span>[][] dp = <span style="color: rgb(204, 120, 50);">new int</span>[lenb][lena]<span style="color: rgb(204, 120, 50);">;
- </span><span style="color: rgb(204, 120, 50);">
- </span><span style="color: rgb(204, 120, 50);"> for</span>(<span style="color: rgb(204, 120, 50);">int </span>i=<span style="color: rgb(104, 151, 187);">0</span><span style="color: rgb(204, 120, 50);">; </span>i<lenb<span style="color: rgb(204, 120, 50);">; </span>i++){
- <span style="color: rgb(204, 120, 50);">char </span>bc = b.charAt(i)<span style="color: rgb(204, 120, 50);">;
- </span><span style="color: rgb(204, 120, 50);"> for</span>(<span style="color: rgb(204, 120, 50);">int </span>j=<span style="color: rgb(104, 151, 187);">0</span><span style="color: rgb(204, 120, 50);">; </span>j<lena<span style="color: rgb(204, 120, 50);">; </span>j++){
- <span style="color: rgb(204, 120, 50);">char </span>ac = a.charAt(j)<span style="color: rgb(204, 120, 50);">;
- </span><span style="color: rgb(204, 120, 50);"> </span>dp[i][j] = Integer.<span style="color: rgb(152, 118, 170); font-style: italic;">MAX_VALUE</span><span style="color: rgb(204, 120, 50);">;
- </span><span style="color: rgb(204, 120, 50);">
- </span><span style="color: rgb(204, 120, 50);"> if</span>(ac==bc){
- <span style="color: rgb(204, 120, 50);">if</span>(i==<span style="color: rgb(104, 151, 187);">0</span>) dp[i][j] = <span style="color: rgb(104, 151, 187);">1</span><span style="color: rgb(204, 120, 50);">;
- </span><span style="color: rgb(204, 120, 50);"> else </span>{
- <span style="color: rgb(204, 120, 50);">for </span>(<span style="color: rgb(204, 120, 50);">int </span>t = <span style="color: rgb(104, 151, 187);">0</span><span style="color: rgb(204, 120, 50);">; </span>t < j<span style="color: rgb(204, 120, 50);">; </span>t++) {
- <span style="color: rgb(204, 120, 50);">if </span>(dp[i - <span style="color: rgb(104, 151, 187);">1</span>][t] == Integer.<span style="color: rgb(152, 118, 170); font-style: italic;">MAX_VALUE</span>) <span style="color: rgb(204, 120, 50);">continue;
- </span><span style="color: rgb(204, 120, 50);"> else </span>dp[i][j] = Math.<span style="font-style: italic;">min</span>(dp[i][j]<span style="color: rgb(204, 120, 50);">, </span>dp[i - <span style="color: rgb(104, 151, 187);">1</span>][t] + j - t)<span style="color: rgb(204, 120, 50);">;
- </span><span style="color: rgb(204, 120, 50);"> </span>}
- }
- }
- }
- }
- <span style="color: rgb(204, 120, 50);">int </span>min = Integer.<span style="color: rgb(152, 118, 170); font-style: italic;">MAX_VALUE</span><span style="color: rgb(204, 120, 50);">;
- </span><span style="color: rgb(204, 120, 50);"> int </span>end = -<span style="color: rgb(104, 151, 187);">1</span><span style="color: rgb(204, 120, 50);">;
- </span><span style="color: rgb(204, 120, 50);">
- </span><span style="color: rgb(204, 120, 50);"> for</span>(<span style="color: rgb(204, 120, 50);">int </span>j=<span style="color: rgb(104, 151, 187);">0</span><span style="color: rgb(204, 120, 50);">; </span>j<lena<span style="color: rgb(204, 120, 50);">; </span>j++){
- <span style="color: rgb(204, 120, 50);">if</span>(dp[lenb-<span style="color: rgb(104, 151, 187);">1</span>][j] < min) {
- min = dp[lenb-<span style="color: rgb(104, 151, 187);">1</span>][j]<span style="color: rgb(204, 120, 50);">;
- </span><span style="color: rgb(204, 120, 50);"> </span>end = j<span style="color: rgb(204, 120, 50);">;
- </span><span style="color: rgb(204, 120, 50);"> </span>}
- }
- <span style="color: rgb(128, 128, 128);">// System.out.println(end);
- </span><span style="color: rgb(128, 128, 128);">// System.out.println(min);
- </span><span style="color: rgb(128, 128, 128);">
- </span><span style="color: rgb(128, 128, 128);"> </span><span style="color: rgb(204, 120, 50);">if</span>(end==-<span style="color: rgb(104, 151, 187);">1</span>) <span style="color: rgb(204, 120, 50);">return </span><span style="color: rgb(106, 135, 89);">"no match!"</span><span style="color: rgb(204, 120, 50);">;
- </span><span style="color: rgb(204, 120, 50);"> return </span>a.substring(end-min+<span style="color: rgb(104, 151, 187);">1</span><span style="color: rgb(204, 120, 50);">, </span>end+<span style="color: rgb(104, 151, 187);">1</span>)<span style="color: rgb(204, 120, 50);">;
- </span><span style="color: rgb(204, 120, 50);"> </span>}</font>
复制代码 |
|