怎么搭建自己公司网站,淘宝网店托管,织梦网站分页问题,室内设计效果图素材网站这道题有很多人都用的什么字符串哈希或者别的一些法子#xff0c;这里作者用了暴力的解法。
思路#xff1a;关键点在于我们怎么存储所给出的字符串容器中每个字符串的子串的编号并加以处理。
这里用到了一种嵌套容器#xff1a;vectormapstring,int…这道题有很多人都用的什么字符串哈希或者别的一些法子这里作者用了暴力的解法。
思路关键点在于我们怎么存储所给出的字符串容器中每个字符串的子串的编号并加以处理。
这里用到了一种嵌套容器vectormapstring,int这样我们既能知道是哪个字符串的子串也能知道子串出现的次数。
好了这样的问题大部分就解决了我们之所以用暴力的原因是因为这里的数据范围非常的小足够我们用暴力进行处理。
注意里面为什么会对于m[n][i]进行计数这个东西相当于对比器就是存储的是所有字符串所拥有的子串的个数而为什么直接比较m[i][当前字串]与m[n][当前字串]是因为m[i][当前子串]是对于它对应的一个字符串的子串是一定只有一个的而m[n][当前子串]就不一样了这个是全部字符串的子集的个数计数这样一比较才能知道这个子集是不是只出现了一次。
第三重循环当中为什么初始值设为j是因为防止所截取的字符串个数是0.
上代码
class Solution {
public:vectorstring shortestSubstrings(vectorstring arr) {int narr.size();vectormapstring,intm(n1);for(int i0;in;i){string bufarr[i];for(int j0;jbuf.size();j){for(int kj;kbuf.size();k){m[i][buf.substr(j,k-j1)];m[n][buf.substr(j,k-j1)];}}}vectorstringres(n);for(int i0;in;i){string bufarr[i];for(int j0;jbuf.size();j){for(int kj;kbuf.size();k){if(m[i][buf.substr(j,k-j1)]m[n][buf.substr(j,k-j1)]){if(res[i].empty())res[i]buf.substr(j,k-j1);if(res[i].size()buf.substr(j,k-j1).size())res[i]buf.substr(j,k-j1);else if(res[i].size()buf.substr(j,k-j1).size())res[i]min(res[i],buf.substr(j,k-j1));}}}}return res;}
};