/**
* 字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
*
*
*
* 示例 1:
*
* 输入:
* first = "pale"
* second = "ple"
* 输出: True
*
*
* 示例 2:
*
* 输入:
* first = "pales"
* second = "pal"
* 输出: False
*
* 来源:力扣(LeetCode)
* 链接:https://leetcode-cn.com/problems/one-away-lcci
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
*/
package s;
public class onceEdit {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
String str1="palesdasdads";
String str2="plesdasdas";
boolean res = ifOnceEdit(str1,str2);
long endTime = System.currentTimeMillis();//获取当前时间
System.out.println(res);
System.out.println("程序运行时间:"+(endTime-startTime)+"ms");
}
private static boolean ifOnceEdit(String str1, String str2) {
if (Math.abs(str1.length()-str2.length())>=2) {
return false;
}
else if (str1.length()==str2.length()){
int count=0;
for (int i=0;i<str1.length();i++) {
if(str1.charAt(i)!=str2.charAt(i)) {
count=count+1;
}
}
if(count>=2) {
return false;
}
}
else{
String str11=str1.length()>str2.length()?str1:str2;
String str22=str1.length()>str2.length()?str2:str1;
for(int i=0;i<str22.length();i++) {
if(str11.charAt(i)!=str22.charAt(i)) {
String str111 =str11.substring(i+1);
String str222=str22.substring(i);
if(str11.substring(i+1).equals(str222)) {
return true;
}
}
}
}
return false;
}}
思路:
1.如果两个字符串长度差大于1,则输出false
2.如果两个字符串长度相等,则两个字符串同一个下标的字符不同的个数应小于2个。
3.如果两个字符串长度差等于1,则长度长的字符串必须包含所有长度短的字符串的每个字符,如果有一个字符没有,则输出false
4,。如果长度长的字符串包含所有长度短的字符串的每个字符,则继续判断,将长度长的字符串多出的字母除去,再判断两个字符串的hashcode是否相等,不等则false