【leetcode】Edit Distance

来源:互联网 发布:股东人数查询软件 编辑:程序博客网 时间:2024/05/16 13:54

Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)

You have the following 3 operations permitted on a word:

a) Insert a character
b) Delete a character

c) Replace a character


Accept: 12ms

int dp[1000][1000];int findDist(char *word1, size_t len1, char *word2, size_t len2) {  if (dp[len1][len2] != 0) {    return dp[len1][len2];  }  if (*word1 == '\0') {    dp[0][len2] = len2;    return dp[0][len2];  } else if (*word2 == '\0') {    dp[len1][0] = len1;    return dp[len1][0];  }  if (*word1 == *word2) {    dp[len1][len2] = findDist(word1+1, len1-1, word2+1, len2-1);    return dp[len1][len2];  }  // REPLACE  int d1 = 1 + findDist(word1+1, len1-1, word2+1, len2-1);  // DELETE  int d2 = 1 + findDist(word1+1, len1-1, word2, len2);  // INSERT  int d3 = 1 + findDist(word1, len1, word2+1, len2-1);  int m = d1;  if (d1 < d2) {    if (d1 < d3) {      m = d1;    } else {      m = d3;    }  } else {    if (d2 < d3) {      m = d2;    } else {      m = d3;    }  }  dp[len1][len2] = m;  return dp[len1][len2];}int minDistance(char *word1, char *word2) {  size_t len1 = strlen(word1);  size_t len2 = strlen(word2);  for (size_t i = 0; i <= len1; ++i) {    for (size_t j = 0; j <= len2; ++j) {      dp[i][j] = 0;    }  }  return findDist(word1, len1, word2, len2);}


0 0
原创粉丝点击