最长不同子序列

无语了😶

题在这里

概述:在给定两个字符串ab中寻找最长的不同子序列(长度)

做的时候还wa了两发,误解了题意(找最长子序列,该子序列不能包含另外一个字符串的子序列,然后就直接set存两个字符串的元素,然后遍历a,b根据set.count开始计数,时间复杂度是2*(len(a)+len(b))的线性复杂度,想也没想直接交,wa了一发是没处理-1,直接0输出,改了然后又wa发现不对劲(ˉ▽ˉ;)...)

3分钟后我的写出解法:

 

class Solution
{
public:
    int findLUSlength(string a, string b)
    {
        int ans = 0, la = a.length(), lb = b.length();
        for (int i = 0; i < la; ++i)
            for (int j = i + ans; j < la; ++j)
            {
                string s(a, i, j);
                if (b.find(s) == b.npos)
                    ans = max(ans, j - i + 1);
            }
        for (int i = 0; i < lb; ++i)
            for (int j = i + ans; j < lb; ++j)
            {
                string s(b, i, j);
                if (a.find(s) == a.npos)
                    ans = max(ans, j - i + 1);
            }
        return ans ? ans : -1;
    }
};
View Code

 

时间复杂度为O(len(a)^2+len(b)^2),但是刚好巧妙在二层j=i+ans优化,所以实际时间复杂度不会这么高。

于是我很自然的瞄了眼题解,却发现是脑筋急转弯!!!

由于是找两字符串的不同子序列,仔细思考一下就能发现:

  如果两串不同,那么最长的串就是answer,否则就是-1

虽然但是,简直是妙蛙种子吃着妙脆角到了米奇妙妙屋——妙到家了!!!

posted @ 2022-03-05 18:40  Renhr  阅读(25)  评论(0)    收藏  举报