首页 > 其他 > 详细

【字符串】面试题 01.05. 一次编辑

时间:2020-05-04 16:25:45      阅读:60      评论:0      收藏:0      [点我收藏+]

题目:

技术分享图片

 

 

解答:

首先判断两个字符串长度,相差大于一返回 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 };

 

【字符串】面试题 01.05. 一次编辑

原文:https://www.cnblogs.com/ocpc/p/12826682.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!