题目:
解答:
首先判断两个字符串长度,相差大于一返回 false
双指针遍历两个字符串,同时记录编辑次数 op_cnt:
若 first[i] == second[j],不需编辑,i,j 加一
若 first[i] != second[j],分为三种情况:
first[i] == second[j+1],那么 j++,op_cnt++
first[i+1] == second[j],那么 i++,op_cnt++
以上两种都不符合,那么使用替换操作,i++,j++,op_cnt++
注意,一旦 op_cnt > 1,返回 false
遍历结束后,若仍有一方未走到结尾,且相差的长度 + op_cnt 大于 1,则返回 false。
1 class Solution { 2 public: 3 bool oneEditAway(string first, string second) 4 { 5 int len1 = first.size(); 6 int len2 = second.size(); 7 8 if (abs(len1 - len2) > 1) 9 { 10 return false; 11 } 12 13 int i = 0; 14 int j = 0; 15 int op_cnt = 0; 16 17 while (i < len1 && j < len2) 18 { 19 if (first[i] == second[j]) 20 { 21 i++; 22 j++; 23 } 24 else 25 { 26 if (first[i] == second[j+1]) 27 { 28 j++; 29 if (op_cnt > 0) 30 { 31 return false; 32 } 33 else 34 { 35 op_cnt++; 36 } 37 } 38 else if (first[i+1] == second[j]) 39 { 40 i++; 41 if (op_cnt > 0) 42 { 43 return false; 44 } 45 else 46 { 47 op_cnt++; 48 } 49 } 50 else 51 { 52 i++; 53 j++; 54 if (op_cnt > 0) 55 { 56 return false; 57 } 58 else 59 { 60 op_cnt++; 61 } 62 } 63 } 64 } 65 if (max(len1 - i, len2 - j) + op_cnt > 1) 66 { 67 return false; 68 } 69 return true; 70 } 71 };
原文:https://www.cnblogs.com/ocpc/p/12826682.html