One Edit Distance
来源:互联网 发布:excel2017 数据有效性 编辑:程序博客网 时间:2024/06/04 23:03
https://oj.leetcode.com/problems/one-edit-distance/
Given two strings S and T, determine if they are both one edit distance apart.
public boolean isOneEditDistance(String s, String t)
这一题和Edit Distance的区别在于Edit Distance让我们求的是总数,这一题要求的是是否一次操作可以从S变成T。也就是要不就删除或插入一个字符,要不就改变一个字符。这样子这一题的做法就完全不一样了。
首先来看删除/插入操作,如果是这个操作的话,必然两者的长度是相差一的。
但如果是替换字符的操作,那么两者的长度是一样的。
所以我们可以从S和T的长度差来做到底是哪一种操作的判断。
当长度相等的时候,必然就是替换操作,当长度差为1的时候,必然就是删除/插入操作。当长度差大于1的时候,直接可以返回false了。
然后我们就可以进行s和t的同步比较了。当出现第一个字符不相等的时候,如果是替换操作,则两者继续同步前进。如果是删除/插入操作的时候,长度较为短的一方可以倒退一步。当如果出现第二次字符不相等的时候,我们就可以返回false了。但如果接下来的都能完全匹配,则就是true。根据上述算法,给出代码如下:
public boolean isOneEditDistance(String s, String t) { String longer = s.length() > t.length() ? s : t; String shorter = longer == s ? t : s; if(longer.length() - shorter.length() > 1)return false; boolean isDelete = longer.length() > shorter.length(); boolean oneEdited = false; for(int i = 0, j = 0; i < longer.length() && j < shorter.length(); i++, j++){ if(longer.charAt(i) != shorter.charAt(j)){ if(oneEdited) return false; oneEdited = true; j = isDelete ? j - 1 : j; } } return oneEdited || isDelete; }
这里有一个trick,当两个字符串相等的时候,也是要返回false的。所以oneEdited或者isDelete必须要有起码一个是true。之所以oneEdited不能作为完全判断是因为如果其中一个字符串是空的,是不会进入循环的,但是isDeleted会因为长度差为一而是true。所以这是必须的。
0 0
- One Edit Distance
- One Edit Distance
- Leetcode One Edit Distance
- One Edit Distance
- one edit distance python
- LeetCode - One Edit Distance
- One Edit Distance
- leetcode - One Edit Distance
- #leetcode#One Edit Distance
- [LeetCode]One Edit Distance
- [LeetCode161] One Edit Distance
- 161. One Edit Distance
- One Edit Distance
- One Edit Distance
- One Edit Distance
- One Edit Distance
- 161. One Edit Distance
- 161. One Edit Distance
- <a>标签的点击事件
- android 翻页卷曲效果 电子书翻页
- View的内部方法回调顺序以及SurfaceView
- 黑马程序员---C语言typedef的使用
- iOS开发,系统自带表情的获取
- One Edit Distance
- 完整实例实现QQ表情的发送和接收
- find命令概览
- (hdu step 5.1.6)Virtual Friends(在结点为名字结点的条件下,求并查集的节点数)
- java 内存泄露
- find命令之exec
- 趋势科技实习录--coredump问题(2015/03/03)
- 卡方检验用于文本分类中的特征提取
- C++开发安卓、windows下搭建Android NDK开发环境