ধরুন আমাদের দুটি স্ট্রিং আছে s এবং t; আমাদের পরীক্ষা করতে হবে যে তারা উভয়ই এক সম্পাদনা দূরত্ব আলাদা কিনা। এক সম্পাদনা দূরত্ব তিন প্রকার −
-
টি
পেতে s-এ একটি অক্ষর সন্নিবেশ করুন -
t পেতে s থেকে একটি অক্ষর মুছুন
-
t
পেতে s-এর একটি অক্ষর প্রতিস্থাপন করুন
সুতরাং, ইনপুট যদি s ="ab", t ="acb" এর মত হয়, তাহলে আউটপুট হবে True
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
n :=s এর আকার, m :=t এর আকার
-
যদি n
-
রিটার্ন isOneEditDistance(t,s)
-
-
আরম্ভ করার জন্য i :=0, যখন i
-
যদি s[i] t[i] এর সমান না হয়, তাহলে −
-
যদি n m এর সমান হয়, তাহলে −
-
সূচী 0 থেকে (i) থেকে s-এর সাবস্ট্রিং 0 থেকে (i) থেকে t-এর সাবস্ট্রিং-এর সমান হলে সত্য ফেরত দিন
-
-
সূচী 0 থেকে (i) থেকে s-এর সাবস্ট্রিং 0 থেকে (i - 1) সূচী থেকে t-এর সাবস্ট্রিং-এর সমান হলে সত্য ফেরত দিন
-
-
-
যখন m + 1 n
এর মত একই হয় তখন true রিটার্ন করুন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#include <bits/stdc++.h> using namespace std; class Solution { public: bool isOneEditDistance(string s, string t) { int n = s.size(); int m = t.size(); if (n < m) { return isOneEditDistance(t, s); } for (int i = 0; i < m; i++) { if (s[i] != t[i]) { if (n == m) { return s.substr(i + 1) == t.substr(i + 1); } return s.substr(i + 1) == t.substr(i); } } return m + 1 == n; } }; main(){ Solution ob; cout << (ob.isOneEditDistance("ab", "acb")); }
ইনপুট
s = "ab", t = "acb"
আউটপুট
1