Вот то, что я реализовал для расстояния Левенштейна / Дамерау – Левенштейна:
public static int GetDistance(string left, string right, bool isDamerauDistanceApplied)
{
if (left.Length == 0) return right.Length;
if (right.Length == 0) return left.Length;
var lenLeft = left.Length;
var lenRight = right.Length;
var matrix = new int[lenLeft + 1, lenRight + 1];
for (var i = 0; i <= lenLeft; i++)
matrix[i, 0] = i;
for (var i = 0; i <= lenRight; i++)
matrix[0, i] = i;
for (var i = 1; i <= lenLeft; i++)
{
for (var j = 1; j <= lenRight; j++)
{
var cost = (left[i - 1] == right[j - 1]) ? 0 : 1;
matrix[i, j] = Math.Min(Math.Min(matrix[i - 1, j] + 1, matrix[i, j - 1] + 1), matrix[i - 1, j - 1] + cost);
if (isDamerauDistanceApplied)
{
// Fixed for string base 0 index.
if (i > 1 && j > 1 && left[i - 1] == right[j - 2] && left[i - 2] == right[j - 1])
{
matrix[i, j] = Math.Min(matrix[i, j], matrix[i - 2, j - 2] + cost);
}
}
}
}
return matrix[lenLeft, lenRight];
}
Преобладает ограничительное выполнение. Я считаю, что Eclipse разрешает взаимодействие с консолью, но быстрый и грязный подход грубой силы заключался бы в использовании suid, если вас не беспокоит безопасность. Или создайте собственное графическое приглашение в Tkinter / other и используйте немного Expect magic , чтобы появиться и ответить процессу sudo. Однако будьте осторожны с ними :)
Возможно, это не идеальное решение, но в тех редких случаях, когда мне нужна такая же функциональность, я в конечном итоге просто запустил Eclipse от имени пользователя root.