leetcode 727 dp+双指针

作者: Ariana不会哭 | 来源:发表于2019-01-13 04:01 被阅读0次
  1. dp:


    image.png
  • code C++:
//dp 112 ms
string minWindow(string S, string T) {
    int m = S.size(), n = T.size();
    vector<vector<int>> dp(m + 1, vector<int>(n + 1,-1));
    for (int i = 0; i < m; i++) {
        dp[i][0] = i;
    }

    int right = 0; int minL = INT_MAX; int start = 0;
    for (int i = 1; i <= m; i++) {
        for (int j = 1; j <= n; j++) {
            if (S[i-1] == T[j-1])
                dp[i][j] = dp[i - 1][j - 1];
            else
                dp[i][j] = dp[i - 1][j];
            if (j == n && dp[i][j] != -1 && minL > i - dp[i][j]) {
                start = dp[i][j];
                minL = i - dp[i][j];
            }
        }
    }
    return (minL==INT_MAX)? "": S.substr(start, minL);
}
  1. 双指针:
    这个速度可以达到最快,主要思路:找到最后一个匹配的下标--right。回溯,找到最左匹配下标-left--i
    提高速度的重要依据 双重while循环。
  • code C++:
//fastest 找到以后 逆推找left 16ms my
string minWindow(string S, string T) {
    int m = S.size(), n = T.size(), minLen = INT_MAX, i = 0, j = 0;
    string ans = "";
    while (i < m) {
        if (S[i] == T[j]) {
            if (j == n-1) {
                int right = i;
                while (j >=0) {
                    while (S[i--] != T[j]);
                    j--;
                }
                ++i;
                if (minLen>right - i+1 ) {
                    minLen = right - i + 1;
                    ans = S.substr(i, minLen);
                }
            }
            j++;
        }
        ++i;
    }
    return ans;
}

相关文章

  • leetcode 727 dp+双指针

    dp:image.png code C++: 双指针:这个速度可以达到最快,主要思路:找到最后一个匹配的下标--r...

  • LeetCode 数组专题 4:双索引技术之一:对撞指针

    在 LeetCode 上,专门有一个标签,名为“双指针”,有数组中的“双指针”,也有单链表中的“双指针”。 例题1...

  • 双指针

    双指针问题总结 双指针经典问题 twoSum (有序数组) 字符串翻转 先看一个例子: leetcode 345....

  • leetcode--双指针

    这周是我在leetcode上刷题的第一周,然后我就把和第一题同一系列的题差不多都做了,我记得我们上高三的时候我们老...

  • LeetCode 专题 :双指针

    LeetCode 第 167 题:两数之和 II - 输入有序数组 传送门:167. 两数之和 II - 输入有序...

  • Leetcode --- 数组(双指针)

    1.合并两个有序数组(88-易) 题目描述:给你两个有序整数数组 nums1 和 nums2,请你将 nums2 ...

  • leetcode-双指针

    209 :给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target ...

  • Leetcode刷题记录-Array

    双指针: 一个指针是for循环,第二个指针是for循环之外的一个指针(通常是int)。Leetcode 27. R...

  • 常用算法

    以下题号如无说明表示在中文leetcode上的题号双指针:15(三数之和)

  • 算法——数组常见初级题(JS)

    一、解法:双指针——快慢指针 Leetcode 26 删除排序数组中的重复项解题思路:两个指针都指向数组的一个数,...

网友评论

    本文标题:leetcode 727 dp+双指针

    本文链接:https://www.haomeiwen.com/subject/hzqkdqtx.html