Нашли несколько различных решений и отладки, и особенно заинтересованы в нижеприведенном решении, которое требует только O (n) пространства, кроме хранения матрицы (M * N). Но смущение о том, что является логическим значением cur [i]. Если у кого есть какие-либо комментарии, он будет высоко оценен.edit distance solution with O (n) space issue
Я разместил решение и код.
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
class Solution {
public:
int minDistance(string word1, string word2) {
int m = word1.length(), n = word2.length();
vector<int> cur(m + 1, 0);
for (int i = 1; i <= m; i++)
cur[i] = i;
for (int j = 1; j <= n; j++) {
int pre = cur[0];
cur[0] = j;
for (int i = 1; i <= m; i++) {
int temp = cur[i];
if (word1[i - 1] == word2[j - 1])
cur[i] = pre;
else cur[i] = min(pre + 1, min(cur[i] + 1, cur[i - 1] + 1));
pre = temp;
}
}
return cur[m];
}
};
Спасибо Хуан, действительно удивительный ответ. Мог ли я понять pre таким образом, pre означает в последней задаче (преобразовать из слова [0: i-1] в слово [0: j-1]), какова минимальная операция? Предположим, что текущая задача состоит в том, чтобы преобразовать из слова [0: i] в [0: j]? –
Привет, Хуан, если бы вы могли прокомментировать мой вышеупомянутый вопрос, это будет здорово. :) –
@LinMa Я сделал редактирование. 'pre' означает именно то, что в исходном алгоритме:' M [i-1] [j-1] '. То есть в контексте минимального вычисления расстояния расстояния 'pre + 1' является« расстоянием редактирования от слова [0: i-1] до слова [0: j-1] + 1 изменение последнего символа (слово [ i] к слову [j]) ». –