关注
先说结论,动态规划,时间复杂度最差为O(n3)。
递推公式为dp[i][j] = str[ dp[i][j-1] +j-i+1 ] ==
str[j]?dp[i][j-1]:dp[dp[i][j-1]]
递推公式优点难懂,举个例子:
abcab
设数组dp[len][len],其中dp[i][j]表示 上一个str[i,j]的开始位置
初始化:因为str[0,0] = a,之前没出现过,dp[0][0] = -1
同理str[1,1] = -1,dp[2][2] = -1,
因为str[3,3] = a,上一次出现的位置为0,因此dp[3][3] = 0
因为str[4,4] = b,上一次出现的位置为1,因此dp[4][4] = 1.
#include <iostream>
#include <vector>
#include <map>
using namespace std;
void getAllSub(const string str){
const int len = str.length();
map<char,int> mymap;
vector<vector<int>>
myvec(len,vector<int>(len,-1));
for(int i =0;i<len;i++){
if(mymap.count(str[i]) == 0){
mymap[str[i]] = i;
}else{
myvec[i][i] = mymap[str[i]];
mymap[str[i]] = i;
}
}
for(int i =0;i<len;i++)
for(int j =i;j<len;j++){
if(i == j){
if(myvec[i][j] != -1 &&
myvec[myvec[i][j]][myvec[i][j]] == -1)
cout<<str.substr(i,1)<<endl;
continue;
}
int tmp = myvec[i][j-1];
while(tmp != -1){
if(str[j] == str[tmp+j-i]){
myvec[i][j] = tmp;
if(myvec[tmp][tmp+j-i-1] == -1)
cout<<str.substr(i,j-i+1)<<endl;
break;
}else tmp = myvec[tmp][tmp+j-i-1];
}
}
}
int main()
{
getAllSub("ababa");
return 0;
}
查看原帖
点赞 评论
相关推荐
牛客热帖
更多
- 1... 大二无实习怎么做到获得一份月薪1.5w+量化的实习和多份大厂核心部门实习的1.6W
- 2... 出身寒微,却攥住鹅厂的入场券1.3W
- 3... 机械八股之材料力学笔面试难点与常考点整理1.2W
- 4... 银行秋招9931
- 5... 那些未曾答上来的硬核面试问题4197
- 6... 拼尽全力仍无法战胜美团。27大三双非鼠鼠被美团激情拷打3h3759
- 7... 我眼里的悲伤3696
- 8... 能做到吗?字节抖音电商秋招记录2970
- 9... 华为主管面准备笔记/适用于一切HR面经验贴2530
- 10... 滴滴后端oc面经总结 Java人拿到Go的云原生意向2327
正在热议
更多
# 为了求职,我做过的疯狂伪装 #
9412次浏览 127人参与
# 从顶到拉给所有面过的公司评分 #
6816次浏览 74人参与
# 职场破冰,你们都聊什么? #
5116次浏览 55人参与
# 晒晒你的中秋福利 #
14415次浏览 86人参与
# 聊聊这家公司值得去吗 #
550297次浏览 3668人参与
# 广联达求职进展汇总 #
10391次浏览 50人参与
# 产品每日一题 #
60435次浏览 604人参与
# 实习要如何选择和准备? #
114207次浏览 1436人参与
# 机械人,你最希望上岸的公司是? #
181625次浏览 1894人参与
# 你面试被问到过哪些不会的问题? #
16771次浏览 662人参与
# 机械笔面试考察这些知识点 #
10101次浏览 89人参与
# 如何快速融入团队? #
31881次浏览 278人参与
# bilibili求职进展汇总 #
82162次浏览 759人参与
# 浪潮求职进展汇总 #
16252次浏览 131人参与
# 你觉得早上几点上班合适? #
82055次浏览 329人参与
# 上班后和你想的一样吗? #
78859次浏览 629人参与
# 工作压力大怎么缓解 #
104430次浏览 1046人参与
# 远景求职进展汇总 #
61076次浏览 317人参与
# 电网笔面经互助 #
46146次浏览 428人参与
# 秋招报数:你投了多少家公司? #
24111次浏览 243人参与