关注
第二题:
小明在学旋律,每段旋律都可以用字符串来表示,并且旋律的每个
字符的ASCALL码递增的
比如以下4段旋律 :
aaa
bcd
bcdef
zzz
现在就是要求,小明能够吧这些旋律拼接起来组成最长的旋律。
比如上述例子输出 11 最长的旋律为 aaabcdefzzz
这题看似简单,不就排个序,然后把第一个字符串的末尾字符小于第二个字符串首字符的两个字符串拼接起来就好了嘛,但是字符串之间可能出现交叉,比如 aaa bcd cdef 肯定是拼接cdef好而不是bcd。那么如何解决呢,这种最优解或最大路径问题,一般就要用到回溯法或者动态规划了。
回溯法就是走迷宫,遍历完所有路径,找出最优的那个路径就行
void nextMelody(vector<string> melodies, int n, int curLength) {
if (n == melodies.size()) {
return;
}
string curMelody = melodies[n];
curLength += curMelody.length();
maxLength = max(maxLength, curLength);
char curMelodyLastChar = curMelody[curMelody.length() - 1];
for (int i = n + 1; i < melodies.size(); i++) {
char nextMelodyFirstChar = melodies[i][0];
int cmp = curMelodyLastChar - nextMelodyFirstChar;
if (cmp <= 0 && curLength + lengthLeft[i] > maxLength) {
nextMelody(melodies, i, curLength);
}
}
}
这是一个递归的回溯剪枝,lengthLeft[]和maxLength 是全局变量,分别用于纪录原数组中还剩的字符串总长度和目前以查找的最优路径,剪枝的条件前str[末]<str[头]且当前最优路径+还剩路径>maxLength (否则就不考虑了,肯定最优已经出来了)
动态规划和回溯差不多 不过可以从后往前,这样可以节省很多重复的开销,不过要开辟N的额外空间。时间效率上都差不多
int dynamicSolver(vector<string>& str) {
//从后往前
int len = str.size();
//用于纪录路径最大和
int *dp=new int[len];
memset(dp, 0, sizeof(dp[0]));
int maxlength=0;
for (int i = len - 1; i >= 0; i--) {
for (int j = i; j < len ; j++)
{
if (i == len - 1)
{
dp[i] = str[i].size();
if (dp[i] > maxlength)
maxlength = dp[i];
}
else if (str[i][str[i].size() - 1] <= str[j][0])
{
dp[i] = max(dp[i], (int)(dp[j] + str[i].size()));
if (dp[i] > maxlength)
maxlength = dp[i];
}
}
}
return maxlength;
}
查看原帖
点赞 评论
相关推荐
11-14 08:52
山东工商学院 Java
吴鹏阳:这个老师如果爱举报,你这门课确实可能挂科,这没办法。但是辅导员所谓的延毕,,怎么说呢,毕业生的就业率可是辅导员的一大考核,他咋可能为了一个逃课实习去损害自己的利益呢? 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你小心翼翼的闯过多大的祸? #
1371次浏览 42人参与
# 考研人,我有话说 #
156360次浏览 1211人参与
# 实习没事做是福还是祸? #
1657次浏览 29人参与
# 找不到实习会影响秋招吗 #
1398834次浏览 13627人参与
# 2025年终总结 #
129004次浏览 2170人参与
# 实习简历求拷打 #
21028次浏览 228人参与
# 哪些公司笔/面试难度大? #
6958次浏览 31人参与
# 携程工作体验 #
18789次浏览 66人参与
# 投格力的你,拿到offer了吗? #
154313次浏览 829人参与
# 秋招遇到的奇葩面试题 #
101164次浏览 416人参与
# 你觉得现在还能进互联网吗? #
29840次浏览 200人参与
# 简历当中有水分算不算造假? #
154204次浏览 2250人参与
# 作业帮求职进展汇总 #
84919次浏览 559人参与
# 秋招被挂春招仍然能投的公司 #
8713次浏览 110人参与
# 扒一扒那些奇葩实习经历 #
139997次浏览 1148人参与
# 正在实习的你,有转正机会吗? #
465628次浏览 3062人参与
# mt对你说过最有启发的一句话 #
41328次浏览 466人参与
# 秋招被确诊为…… #
277082次浏览 1583人参与
# 国庆前的秋招小结 #
265740次浏览 1718人参与
# 信也科技工作体验 #
13488次浏览 39人参与

