标签:put move lan NPU number execution question return bsp
Given two words word1 and word2, find the minimum number of operations required to convert word1 to word2.
You have the following 3 operations permitted on a word:
Example 1:
Input: word1 = "horse", word2 = "ros" Output: 3 Explanation: horse -> rorse (replace ‘h‘ with ‘r‘) rorse -> rose (remove ‘r‘) rose -> ros (remove ‘e‘)
Example 2:
Input: word1 = "intention", word2 = "execution" Output: 5 Explanation: intention -> inention (remove ‘t‘) inention -> enention (replace ‘i‘ with ‘e‘) enention -> exention (replace ‘n‘ with ‘x‘) exention -> exection (replace ‘n‘ with ‘c‘) exection -> execution (insert ‘u‘)
使用递归会造成Time limit exceeded
class Solution { public int minDistance(String word1, String word2) { StringBuffer strBuf1 = new StringBuffer(word1); StringBuffer strBuf2 = new StringBuffer(word2); return dfs(strBuf1,strBuf2,0,0,0); } public int insert(StringBuffer strBuf1, StringBuffer strBuf2, int i1, int i2, int depth){ strBuf1.insert(i1, strBuf2.charAt(i2)); int ret = dfs(strBuf1,strBuf2,i1+1, i2+1,depth+1); strBuf1.deleteCharAt(i1); //recover return ret; } public int delete(StringBuffer strBuf1, StringBuffer strBuf2, int i1, int i2, int depth){ Character ch = strBuf1.charAt(i1); strBuf1.deleteCharAt(i1); int ret = dfs(strBuf1,strBuf2,i1, i2,depth+1); strBuf1.insert(i1,ch); //recover; return ret; } public int replace(StringBuffer strBuf1, StringBuffer strBuf2, int i1, int i2, int depth){ Character ch = strBuf1.charAt(i1); strBuf1.setCharAt(i1, strBuf2.charAt(i2)); int ret = dfs(strBuf1,strBuf2,i1+1, i2+1,depth+1); strBuf1.setCharAt(i1, ch); return ret; } private int dfs(StringBuffer strBuf1, StringBuffer strBuf2, int i1, int i2, int depth){ while(i1 < strBuf1.length() && i2 < strBuf2.length() && strBuf1.charAt(i1) == strBuf2.charAt(i2)){ i1++; i2++; } if(i1 == strBuf1.length() && i2 == strBuf2.length()) return depth; if(i1 == strBuf1.length()) return depth+strBuf2.length()-i2; if(i2 == strBuf2.length()) return depth+strBuf1.length()-i1; int ret = insert(strBuf1,strBuf2,i1,i2,depth); ret = Math.min(ret,delete(strBuf1,strBuf2,i1,i2,depth)); ret = Math.min(ret,replace(strBuf1,strBuf2,i1,i2,depth)); return ret; } }
标签:put move lan NPU number execution question return bsp
原文地址:https://www.cnblogs.com/qionglouyuyu/p/10913547.html