Advertisement
Alexxik

Untitled

Sep 15th, 2023 (edited)
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 2.55 KB | None | 0 0
  1. // MARK: - 161. One Edit Distance
  2. // Даны строки s и t, определить являются ли они одинаковыми после ОДНОГО редактирования
  3. // Возможности для редактирования:
  4.  
  5. // РЕДАКТИРОВАТЬ МОЖНО ТОЛЬКО S!
  6.  
  7. // Insert a character into s to get t
  8. // Delete a character from s to get t
  9. // Replace a character of s to get t
  10.  
  11. func isOneEditDistanse(_ s: String, _ t: String) -> Bool {
  12.     let s = Array(s).map{String($0)}
  13.     let t = Array(t).map{String($0)}
  14.    
  15.    
  16.     var lenS = s.count
  17.     var lenT = t.count
  18.    
  19.     // если одна из строк слишком большая, то за одно действие их поменять нельзя
  20.     // если строки равны, то тоже нельзя за 1 действие их поменять
  21.     if abs(lenS-lenT) > 1 || s == t {
  22.         return false
  23.     }
  24.    
  25.     // Цикл будет проходить по индексам минимальной строки (иначе если будем проходит по большой будет index out of range)
  26.     for i in 0..<min(lenS, lenT) {
  27.         if s[i] != t[i] {
  28.             // берем слайсы если буквы не равны
  29.             // для replace - проверяем сходятся ли остальные части строк после этого индекса где есть отличия
  30.             // для insert - проверяем сходятся ли строки если в t пропустим букву, которую в теории можно вставить в s
  31.             // для delete - проверяем сходятся ли строки если в s пропустим букву - как бы удаляя ее
  32.             // Если что-то вернет true, то true
  33.  
  34.             return s[i+1..<lenS] == t[i+1..<lenT]       // Замена
  35.                     || s[i..<lenS] == t[i+1..<lenT]     // Удаление из t
  36.                     || s[i+1..<lenS] == t[i..<lenT]     // Вставка в s
  37.         }
  38.     }
  39.    
  40.     // Нужно обработать отдельный кейс, когда s = "a", t = "" - то есть удаление и t - пустая строка
  41.     return true
  42. }
  43.  
  44. isOneEditDistanse("abef", "acbef")
  45. isOneEditDistanse("acbref", "acbef")
  46. isOneEditDistanse("a", "")
  47. isOneEditDistanse("acgef", "acbef")
  48. isOneEditDistanse("ab", "acbef")
  49. isOneEditDistanse("abeffwefef", "acbef")
  50. isOneEditDistanse("acbef", "acbef")
  51. isOneEditDistanse("acbeffv", "acbefp")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement