相似字符串(字符串编辑)最短距离(非递归版本)
2013-10-07 13:59
197 查看
第一次写的递归版本:点击打开链接,速度太慢了,基本case都超时,重新写一个非递归的
/*given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.) You have the following 3 operations permitted on a word: a) Insert a character b) Delete a character c) Replace a character */ #include <string> #include <iostream> class Solution { public: int minDistance(std::string word1,std::string word2) { /*return minDistanceHelper(word1.begin(), word1.end(), word2.begin(), word2.end() );*/ //recursive version //non recursive version if(word1.size()==0) return word2.size(); if(word2.size()==0) return word1.size(); int matrix[word1.size()+1][word2.size()+1]; for(size_t i=0;i<=word1.size();++i) matrix[i][0]=i; for(size_t i=0;i<=word2.size();++i) matrix[0][i]=i; for(int i=1;i<=word1.size();++i) { for(int j=1;j<=word2.size();++j) { if(word1[i-1]==word2[j-1]) matrix[i][j]=matrix[i-1][j-1]; else { int c1=matrix[i-1][j-1];//replace int c2=matrix[i-1][j]; //delete int c3=matrix[i][j-1]; //insert matrix[i][j]=1+(c1<=c2?(c1<=c3?c1:c3):(c2<=c3?c2:c3)); } } } return matrix[word1.size()][word2.size()]; } private: //recursive version with no state int minDistanceHelper(std::string::iterator lbegin, std::string::iterator lend, std::string::iterator rbegin, std::string::iterator rend) { if(lbegin==lend) return rend-rbegin; //insert charater else if(rbegin==rend) return lend-lbegin; //delete charater else if(*lbegin==*rbegin) { return minDistanceHelper(lbegin+1,lend,rbegin+1,rend); } else { int c1=1+minDistanceHelper(lbegin+1,lend,rbegin,rend);//delete int c2=1+minDistanceHelper(lbegin,lend,rbegin+1,rend);//insert int c3=1+minDistanceHelper(lbegin+1,lend,rbegin+1,rend);//replace return c1<=c2?(c1<=c3?c1:c3):(c2<=c3?c2:c3); } } }; int main(int argc,char* argv[]) { std::string one("b"); std::string two("a"); Solution s; std::cout<<s.minDistance(one,two)<<std::endl; return 0; }
相关文章推荐
- 【DP总结】【字符串】最短编辑距离
- 字符串编辑距离(C递归实现)
- 最短编辑距离算法(字符串比较)
- 字符串最短距离CalculateStringDistance(递归 or 动态规划)
- 求两个字符串的最短编辑距离
- 求字符串编辑距离的递推和递归实现
- 24字符串最短编辑距离
- 字符串的修改(动态规划-最短编辑距离)
- Python实现求两个字符串的最短编辑距离
- Edit Distance(编辑距离)算法。计算两个字符串的相似程度。
- 两个字符串之间的最短编辑距离
- 字符串算法:最长公共子序列、最短编辑距离等
- Edit Distance(编辑距离)算法。计算两个字符串的相似程度。
- Trie树求多个字符串最短编辑距离的空间优化
- 2014年亚马逊在线笔试题目及解法_9_24(字符串编辑距离升级版)
- 字符串编辑距离
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)
- LeetCode-72. Edit Distance (JAVA)字符串最小编辑距离DP&DFS