原题地址:https://leetcode.cn/problems/one-edit-distance/ 
题解
两个字符串编辑距离为1只有2种情况:
- 两个字符串长度相等,且仅有一个字符不等
 
- 两个字符串长度仅相差1,且长的字符串仅仅是短的字符串插入一个字符
 
用一个flag记录下修改次数,指针i和j分别指向s和t的对应下标
对于长度相等的情况,不断比较i和j指向字符,当i和j指向字符不等时,记录修改次数,下一次再次遇到i和j指向字符不等时则说明编辑距离大于1,返回false
对于长度不等的情况,不断比较i和j指向的字符,当i和j指向字符不等时,有可能其中一个是多出来的字符,对于较长的字符串,我们让对应的指针++,此时应当跳过了那个多余的字符,因此可以继续比较,下一次再次遇到i和j指向字符不等时则说明编辑距离大于1,返回false
时间复杂度:O(N)
空间复杂度:O(1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
   | class Solution {     public boolean isOneEditDistance(String s, String t) {         if(s.equals(t)||Math.abs(s.length()-t.length())>=2)return false;         boolean flag=true;         int i=0,j=0;         if(s.length()==t.length()){             while(i<s.length()&&j<t.length()){                 if(flag&&s.charAt(i)!=t.charAt(j)){                     flag=false;                 }else if(!flag&&s.charAt(i)!=t.charAt(j)){                     return false;                 }                 i++;                 j++;             }         }else{             while(i<s.length()&&j<t.length()){                 if(flag&&s.charAt(i)!=t.charAt(j)){                     flag=false;                     if(s.length()<t.length())j++;                     else i++;                 }else if(!flag&&s.charAt(i)!=t.charAt(j)){                     return false;                 }else{                     i++;                     j++;                 }             }         }         return true;     } }
  |