题目

image.png

思路

  • 利用递归去控制first的长度始终小于等于second的长度。
  • 如果长度之差超过1,返回false
  • 如果长度恰好相等,那么利用计数器去判断
  • 如果长度相差1,那么利用双指针去判断

    利用递归去控制first的长度始终小于等于second的长度。代码

    1. class Solution {
    2. public:
    3. bool oneEditAway(string first, string second) {
    4. int len_first = first.size(), len_second = second.size();
    5. if (len_first > len_second) {
    6. return oneEditAway(second, first);
    7. }
    8. if (len_second - len_first > 1) {
    9. return false;
    10. }
    11. if (len_first == len_second) {
    12. int cnt = 0;
    13. for (int i = 0; i < len_first; i++) {
    14. if (first[i] == second[i]) {
    15. continue;
    16. } else {
    17. cnt += 1;
    18. }
    19. if (cnt > 1) {
    20. return false;
    21. }
    22. }
    23. return true;
    24. }
    25. if (len_first + 1 == len_second) {
    26. int p1 = 0, p2 = 0, cnt = 0;
    27. while (p1 < len_first && p2 < len_second) {
    28. if (first[p1] != second[p2]) {
    29. if (cnt == 0) {
    30. p2 += 1;
    31. cnt += 1;
    32. } else {
    33. return false;
    34. }
    35. } else {
    36. p1++;
    37. p2++;
    38. }
    39. }
    40. return true;
    41. }
    42. return false;
    43. }
    44. };