golang力扣leetcode 面试题01.05.一次编辑

面试题01.05.一次编辑

题解

题目:给定两个字符串,只能进行一次[增加一个字符,删除一个字符,修改一个字符],问能否在一次编辑,或者,零次编辑后,两个字符串相等

思路:

1.对于零次的情况:两个字符串本来就相等
2.如果两个字符串长度差为2,至少需要两次,直接返回false即可
3.遍历短的字符串,依次判断字符,直到遇到不相等的情况
	如果两个字符串长度相等:修改----》直接判断后半串字符串是否相等
	如果两个字符串不相等:对于短字符串来说是插入,对于长字符串来说是删除
		-----》 判断s1[i:] == s2[i+1:]

代码

func oneEditAway(s1 string, s2 string) bool {
          
   
	n, m := len(s1), len(s2) //s1 小 s2 大
	if n > m {
          
   
		return oneEditAway(s2, s1)
	}
	if m-n > 1 {
          
   
		return false
	}
	if s1 == s2 {
          
   
		return true
	}
	for i := 0; i < len(s2); i++ {
          
   
		if s2[i] != s1[i] {
          
   
			if len(s1) == len(s2) {
          
   
				return s1[i+1:] == s2[i+1:]
			}
			return s1[i:] == s2[i+1:]
		}
	}
	return true
}
经验分享 程序员 微信小程序 职场和发展