题目
题目链接:
https://www.nowcoder.com/practice/0b4b22ae020247ba8ac086674f1bd2bc
思路
注意:必须要新增一个,或者删除一个,或者替换一个,所以不能相等
1.如果s和t相等,返回false,如果s和t长度差大于1,返回false
2.s比t长,s删除【忽略】一个,比较是否相等
3.s比t短,t要删除【忽略】一个,比较是否相等
4.s和t一样长,那么找到第一个不同的字符的位置,过滤掉。比较后面的是否相等
参考答案Java
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @param t string字符串
* @return bool布尔型
*/
public boolean editdistance (String s, String t) {
int n = s.length();
int m = t.length();
int diff = Math.abs(n - m);
if (s.equals(t) || diff > 1 ) return false;
int i = 0, j = 0;
while (i < n && j < m && s.charAt(i) == t.charAt(j)) {
i++;
j++;
}
if (n > m) { //s比t多一个,那s就删一个
return s.substring(i + 1).equals(t.substring(j));
} else if (n < m) { //s比t少一个,那就s加一个
return s.substring(i).equals(t.substring(j + 1));
} else { //相等,那就替换,s和t都往前走一步
return s.substring(i + 1).equals(t.substring(j + 1));
}
}
}
参考答案Go
package main
//import "fmt"
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @param t string字符串
* @return bool布尔型
*/
func editdistance(s string, t string) bool {
n := len(s)
m := len(t)
diff := m - n
if n > m {
diff = n - m
}
if s == t || diff > 1 {
return false
}
i := 0
j := 0
for i < n && j < m && s[i] == t[j] {
i++
j++
}
if n > m { //s 比t多一个,s删一个
return s[i+1:] == t[j:]
} else if n < m { //s比t少一个,s就加一个
return s[i:] == t[j+1:]
} else { //s和t一样长,那就替换,也就是s和t都往前走一步
return s[i+1:] == t[j+1:]
}
}
参考答案PHP
<?php
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @param t string字符串
* @return bool布尔型
*/
function editdistance( $s , $t )
{
$n = strlen($s);
$m = strlen($t);
$diff = $n-$m;
if($m>$n) {
$diff = $m-$n;
}
if($s==$t || $diff >1) return false;
$i=0;
$j=0;
while ($i<$n&& $j<$m && $s[$i]==$t[$j]){
$i++;
$j++;
}
if($n > $m){ //s多一个,删s中的那个
return substr($s,$i+1) == substr($t,$j);
}else if($n < $m){ //s少一个,s中加一个
return substr($s,$i) == substr($t,$j+1);
}else{ //s,t长度一样,替换,都往前走一步
return substr($s,$i+1) == substr($t,$j+1);
}
}