zoukankan      html  css  js  c++  java
  • [LeetCode] Edit Distance

    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

    这题真是火大啊,犯了个低级错误,在private里开了个f[1000][1000],然后每次都memset(f, 0, sizeof(f))一下,本来以为开销不大,没想到大数据一直超时,始终找不到问题,

    想想算法没错呀,O(n^2)应该是最低了,没想到是memset搞得鬼,以后真是不能随便一个memset了。

     1 class Solution {
     2 public:
     3     int minDistance(string word1, string word2) {
     4         // Start typing your C/C++ solution below
     5         // DO NOT write int main() function
     6         vector<vector<int> > f(word1.size()+1, vector<int>(word2.size()+1));
     7         
     8         f[0][0] = 0;
     9         for(int i = 1; i <= word2.size(); i++)
    10             f[0][i] = i;
    11         
    12         for(int i = 1; i <= word1.size(); i++)
    13             f[i][0] = i;
    14             
    15         for(int i = 1; i <= word1.size(); i++)
    16             for(int j = 1; j <= word2.size(); j++)
    17             {
    18                 f[i][j] = INT_MAX;
    19                 if (word1[i-1] == word2[j-1]) 
    20                     f[i][j] = f[i-1][j-1];
    21                 
    22                 f[i][j] = min(f[i][j], f[i-1][j-1] + 1); //replace
    23                 f[i][j] = min(f[i][j], min(f[i-1][j], f[i][j-1]) + 1); //delete or insert               
    24             }
    25             
    26         return f[word1.size()][word2.size()];
    27     }
    28 };
  • 相关阅读:
    nodejs内存溢出解决方法
    mongodb副本集与分片结合
    node加密
    守护进程,互斥锁,IPC,队列,生产者与消费者模型
    并发编程
    粘包问题
    socket编程
    xml模块
    网络编程
    异常处理
  • 原文地址:https://www.cnblogs.com/chkkch/p/2757668.html
Copyright © 2011-2022 走看看