Есть ли какое-либо решение проблемы Изменить расстояние в O (n * m), кроме решения динамического программирования? - PullRequest
0 голосов
/ 29 октября 2019

Для задачи Edit Distance https://www.geeksforgeeks.org/edit-distance-dp-5/, Я разработал то, что мне кажется, нерекурсивный подход без dp, в O (n * m). Я дал код ниже. Кто-нибудь может указать какой-то особый случай, когда он может не работать?

public static void main(String args[]){
    String str1="abc";
    String str2="wxyz";
    int m=str1.length();
    int n=str2.length();
    int count=0;
    if(m==n){
        for(int i=0;i<m;i++){
            if(str1.charAt(i)!=str2.charAt(i))
                count++;
        }
    }
    else if(m<n){
        int[] arr=new int[n];
        count=edit(str1,str2,arr);
    }    
    else{
        int[] arr=new int[m];
        count=edit(str2,str1,arr);
    }
    System.out.println(count);    
}
public static int edit(String s1,String s2,int[] arr){
    int j=0,count=0;
    for(int i=0;i<s1.length();i++){
        for(int k=j;k<s2.length();k++){
            if(s1.charAt(i)==s2.charAt(k)){
                arr[k]=-1;
                j=k+1;
                break;
            }
        }
        /*for(int k=0;k<arr.length;k++)
            System.out.print(arr[k]+" ");
        System.out.println();*/
    }
    for(int i=0;i<arr.length;i++){
        if(arr[i]==0)
            count++;
    }
    return count;
}
...