Education + Jobs Hiring Website - 2025
0 like 0 dislike
153 views

ago in Online Assessments by Expert (139,070 points) | 153 views

1 Answer

0 like 0 dislike
#include<bits/stdc++.h>

using namespace std;

char rot13(char c){

    if(c>='a' && c<='z'){

        return (c-'a'+13)%26 +'a';

    }

    return c;

}

int solve(string W1,string W2){

    int n = W1.size();

    int m = W2.size();

    vector<vector<vector<int>>> dp(n+1,vector<vector<int>>(m+1,vector<int>(2,-1)));

    auto getmin = [&](auto& self,int i,int j,int rot) ->int {

          if(i==n && j==m) return 0;

          if(i==n) return m-j;

          if(j==m) return n-i;

          if(dp[i][j][rot]!=-1) return   dp[i][j][rot];

          char c1 = (rot==1)? rot13(W1[i]):W1[i];

          char c2 = W2[j];

          int ans = 1e9 ;

          if(c1==c2) ans = min(ans,self(self,i+1,j+1,rot));

          ans = min(ans,1+ self(self,i+1,j+1,rot)); //replace

          ans = min(ans,1+self(self,i+1,j,1-rot)); // delete

          ans = min(ans,self(self,i,j+1,1-rot)); //insert

          return dp[i][j][rot] = ans;

    }

    return getmin(getmin,0,0,0);

 

 

}
ago by (140 points)