【求解字符串中某子序列的最大出现次数】 DFS + 回溯

给定一个字符串,求解该串中某一个子序列最多出现的次数。

这里采用暴力的方法,有些数据量小的题可以试试,大一点的就肯定超时了。

思路:因为是子序列不一定连续只要下标递增就行了,那么对于每个位置,都有把当前字符压进栈(字符串尾部更新)或者不选的操作,那么这里就有回溯了。另外每次搜索都将当前字符串存进哈希表,并且value+1,到最后遍历一遍哈希看哪个string的value最大即可。

#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;
typedef long long ll;
map<string ,int>  vis;
string s;
void dfs(int pos,string t)
{
     vis[t]++;
     for(int i=pos;i<s.size();i++)
     {
           t+= s[i];
           dfs(i+1,t);
           t.erase(t.size()-1);
     }
}

int main()
{

    cin>>s;
    string tmp;
    dfs(0,tmp);
    int max=0;
    for(auto it=vis.begin();it!=vis.end();it++)
    {
          if(max<it->second)
          max=it->second;
    }
    cout<<max<<endl;
    return 0;
}

发布了32 篇原创文章 · 获赞 23 · 访问量 1818

猜你喜欢

转载自blog.csdn.net/qq_45492531/article/details/104372581