原题地址: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; } }
|