最长不同子序列
无语了😶
题在这里
概述:在给定两个字符串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; } };
时间复杂度为O(len(a)^2+len(b)^2),但是刚好巧妙在二层j=i+ans优化,所以实际时间复杂度不会这么高。
于是我很自然的瞄了眼题解,却发现是脑筋急转弯!!!
由于是找两字符串的不同子序列,仔细思考一下就能发现:
如果两串不同,那么最长的串就是answer,否则就是-1
虽然但是,简直是妙蛙种子吃着妙脆角到了米奇妙妙屋——妙到家了!!!

浙公网安备 33010602011771号