Jurijus Zaksas
Искусственный Интеллект
(424908)
4 года назад
Примерно так (если я правильно понял, что там происходит):
public static T[,] InitializeMatrix< T >(int rows, int cols)
{
return new T[cols, rows];
}
public static int diff(string firstWord, string secondWord)
{
char[] arr1 = firstWord.ToCharArray();
char[] arr2 = secondWord.ToCharArray();
int[,] matrix = InitializeMatrix< int >(arr1.Length, arr2.Length);
for (int i = 0; i < arr1.Length; i++)
{
for (int j = 0; j < arr2.Length; j++)
{
if (arr1[i] == arr2[j])
{
if (i > 0 && j > 0)
{
matrix[i,j] = matrix[i - 1, j - 1] + 1;
}
else
{
matrix[i, j] = 1;
}
}
else
{
if (i > 0 && j > 0)
{
matrix[i, j] = Math.Max(matrix[i - 1, j], matrix[i, j - 1]);
}
else
{
matrix[i, j] = 0;
}
}
}
}
return matrix[arr1.Length - 1, arr2.Length - 1];
}
Владимир ВеличкоУченик (26)
4 года назад
Спасибо вам, алгоритм должен работать например: вводным поисковике слово не правильно выдать другое слово правильное.
В данном случае просто проверка алгоритм c 2 слов.
Читал книгу "Грокаем Алгоритмы" там только алгоритм полный на javascript.
export default function initialize_matrix(rows, cols){
let matrix = [];
for (let i = 0; i < rows.length; i++){
matrix.push(Array(cols.length).fill(0));
}
return matrix;
}
diff_two_words.js
import initialize_matrix as base from "./base.js";
export default function diff( firstWord, secondWord ){
let arr1 = firstWord.split('');
let arr2 = secondWord.split('');
let matrix = initialize_matrix(arr1, arr2);
for (let i = 0; i < arr1.length; i++){
for (let j = 0; j < arr2.length; j++){
if( arr1[i] == arr2[j] ){
if( i > 0 && j > 0){
matrix[i][j] = matrix[i - 1][j - 1] + 1;
}else{
matrix[i][j] = 1;
}
} else {
if( i > 0 && j > 0){
matrix[i][j] = Math.max(matrix[i - 1][j], matrix[i][j - 1]);
}else{
matrix[i][j] = 0;
}
}
}
}
return matrix[arr1.length-1][arr2.length-1];
}