给定一个字符串,求解该串中某一个子序列最多出现的次数。
这里采用暴力的方法,有些数据量小的题可以试试,大一点的就肯定超时了。
思路:因为是子序列不一定连续只要下标递增就行了,那么对于每个位置,都有把当前字符压进栈(字符串尾部更新)或者不选的操作,那么这里就有回溯了。另外每次搜索都将当前字符串存进哈希表,并且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;
}