算法-字符串最小變換次數

題目描述

給定兩個字符串,已知可以使用三種方式進行變換

  1. 插入一個字符
  2. 刪除一個字符
  3. 更改一個字符
    請設計一個算法,找到兩個字符串之間的經歷幾次最小變換,可以字符串1轉換成字符串2

輸入描述

輸入兩個字符串,字符串的長度<=1000

輸出描述

最小變換次數

分析:

這道題花費的很長時間,主要還是沒有想到用動態規劃法,我一直考慮求出最長的非連續的公共子序列問題,有點坑。也就不解釋了,看看程序就明白其中的動態規劃思想了。平常用的動態規劃喜歡
使用以爲數組之類的,使用二維數組這是一道典型的題了。

import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
 * @Author: jiangcw
 * @Date: 2019-8-25 上午 10:58
 * @Version 1.0
 */
public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        String t = br.readLine();
        int sLen = s.length();
        int tLen = t.length();
        int[][] dp = new int[sLen + 1][tLen + 1];
        for(int i = 0; i <= sLen; i++) {
            dp[i][0] = i;
        }
        for(int i = 0; i <= tLen; i++) {
            dp[0][i] = i;
        }
        for(int i = 1; i <= sLen; i++) {
            for(int j = 1; j <= tLen; j++) {
                dp[i][j] = Math.min(dp[i - 1][j - 1] + (s.charAt(i - 1) == t.charAt(j - 1)?0:1), 
                                   Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1));
            }
        }
        System.out.println(dp[sLen][tLen]);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章