leetcode 面试题 01.05.一次编辑
原题
https://leetcode-cn.com/problems/one-away-lcci/
题解
方法一
两字符串长度差最多差1,差1以上的话就至少需要修改两次了,直接返回假; 长度相同,字符串不用修改就相同的时候也算真;不同字符前后都相同的真,否则假; 长度first比second大1,先排较长的除末尾多一个字符的情况,如果仅仅是较长的末尾多了一个字符,则为真;其他时,忽略掉不同字符(假设长的里面的是多出来的),剩下的相同则真,否则为假。 本思路java代码示例:
/* *@v7fgg *执行用时 :2 ms, 在所有 Java 提交中击败了99.42%的用户 *内存消耗 :39.9 MB, 在所有 Java 提交中击败了100.00%的用户 *2020年6月18日 7:29 */ class Solution { public boolean oneEditAway(String first, String second) { int x=first.length()-second.length(); //长度差最多差1,差2的话就至少需要修改两次了,直接返回假 if(x==0){ //字符串不用修改就相同的时候也算真 if(first.equals(second)){ return true;} //不同字符前后都相同的真,否则假 for(int i=0;i<first.length();i++){ if(first.charAt(i)!=second.charAt(i)){ if(first.substring(i+1).equals(second.substring(i+1))){ return true; } else{ return false;} } } } else if(x==1){ //先排较长的除末尾多一个字符的情况 if(second.equals(first.substring(0,second.length()))){ return true;} //忽略掉不同字符(假设长的里面的是多出来的),剩下的相同则真 for(int i=0;i<second.length();i++){ if(first.charAt(i)!=second.charAt(i)){ if(first.substring(i+1).equals(second.substring(i))){ return true; } else{ return false;} } } } else if(x==-1){ //道理同x==1的情况 if(first.equals(second.substring(0,first.length()))){ return true;} for(int i=0;i<first.length();i++){ if(first.charAt(i)!=second.charAt(i)){ if(first.substring(i).equals(second.substring(i+1))){ return true; } else{ return false;} } } } return false; } }
上一篇:
IDEA上Java项目控制台中文乱码