Redian新闻
>
今天灌水不踊跃,出道题吧
avatar
今天灌水不踊跃,出道题吧# JobHunting - 待字闺中
p*2
1
给你一个字符串数组,你需要发现符合如下规律的一组字符串,使得这组字符串的字符
总数最大化
1. 第一个字符串的第一个字符是最后一个字符串的最后一个字符
2. 每一个字符串的最后一个字符是下一个字符串的第一个字符
找到的这组字符串的顺序不变,还是按照在初始数组的顺序排列。
例如
input
3
abc
ca
cba
output
6
abc
ca
符合条件,但是总长度为5
abc
cba
符合条件,长度为6
最后返回最大长度6
字符串的个数最大到 5*10^5
avatar
l*8
2
带权有向图中找weight sum 最大的回路。
avatar
l*8
3
不对,还有这个条件:
找到的这组字符串的顺序不变,还是按照在初始数组的顺序排列

【在 l*********8 的大作中提到】
: 带权有向图中找weight sum 最大的回路。
avatar
q*y
4
DFS 求和最大的路径
avatar
p*2
5

时间复杂度?

【在 q***y 的大作中提到】
: DFS 求和最大的路径
avatar
q*y
6
可以啊,建图的时候只保留有效地边。

【在 l*********8 的大作中提到】
: 不对,还有这个条件:
: 找到的这组字符串的顺序不变,还是按照在初始数组的顺序排列

avatar
p*2
7
更新了一下。输入最大是5*10^5个字符串。
avatar
q*y
8
貌似要O(n^3)。太困了,明天再想。。

【在 p*****2 的大作中提到】
: 更新了一下。输入最大是5*10^5个字符串。
avatar
l*8
9
只有26个字母吗?

【在 p*****2 的大作中提到】
: 更新了一下。输入最大是5*10^5个字符串。
avatar
p*2
10

只有26个字母。不会有其他字符。

【在 l*********8 的大作中提到】
: 只有26个字母吗?
avatar
g*s
11
任何一个字符串,只考虑它的第一个后最后一个字母。
设p(a,b) 为第一个字母是a,最后一个字母是b的字符串数目。
这样,扫描一遍就可以算出所有的p。p的空间是26×26.
后面怎么处理都不难了。

【在 p*****2 的大作中提到】
: 给你一个字符串数组,你需要发现符合如下规律的一组字符串,使得这组字符串的字符
: 总数最大化
: 1. 第一个字符串的第一个字符是最后一个字符串的最后一个字符
: 2. 每一个字符串的最后一个字符是下一个字符串的第一个字符
: 找到的这组字符串的顺序不变,还是按照在初始数组的顺序排列。
: 例如
: input
: 3
: abc
: ca

avatar
p*2
12

膜拜grass。真是太牛了。这题我想了一个多小时。

【在 g***s 的大作中提到】
: 任何一个字符串,只考虑它的第一个后最后一个字母。
: 设p(a,b) 为第一个字母是a,最后一个字母是b的字符串数目。
: 这样,扫描一遍就可以算出所有的p。p的空间是26×26.
: 后面怎么处理都不难了。

avatar
A*l
13
赞简化问题的思维

【在 g***s 的大作中提到】
: 任何一个字符串,只考虑它的第一个后最后一个字母。
: 设p(a,b) 为第一个字母是a,最后一个字母是b的字符串数目。
: 这样,扫描一遍就可以算出所有的p。p的空间是26×26.
: 后面怎么处理都不难了。

avatar
l*8
14
维护26个字母之间的最长距离矩阵。
每个字符串代表一条边,边的两个节点是字符串第一个字符和最后一个字符。
例如 cba 代表从c到a的weight为3的边。
每scan一个字符串, update一次最长距离矩阵,并检查回路。( O(k) for each scan,
which k is 26. )
For n strings, O(k*n) time.
avatar
l*8
15
你说的p(a,b)是从a到b的最长通路长度吧?

【在 g***s 的大作中提到】
: 任何一个字符串,只考虑它的第一个后最后一个字母。
: 设p(a,b) 为第一个字母是a,最后一个字母是b的字符串数目。
: 这样,扫描一遍就可以算出所有的p。p的空间是26×26.
: 后面怎么处理都不难了。

avatar
A*l
16
好像有点问题
字母虽然只有26个,但是是可以重复使用的吧?
abc
cde
efc
cgh
ha
这样c自己形成了环,不知道是不是合题意?

,

【在 l*********8 的大作中提到】
: 维护26个字母之间的最长距离矩阵。
: 每个字符串代表一条边,边的两个节点是字符串第一个字符和最后一个字符。
: 例如 cba 代表从c到a的weight为3的边。
: 每scan一个字符串, update一次最长距离矩阵,并检查回路。( O(k) for each scan,
: which k is 26. )
: For n strings, O(k*n) time.

avatar
l*8
17
复杂回路里面节点是可以重复的。

【在 A**l 的大作中提到】
: 好像有点问题
: 字母虽然只有26个,但是是可以重复使用的吧?
: abc
: cde
: efc
: cgh
: ha
: 这样c自己形成了环,不知道是不是合题意?
:
: ,

avatar
l*8
18
贴个程序。 直接在这里敲的,可能有问题:)
int longestCircle(vector &ss)
{
int len[26][26];
memset(len, 0, 26*26*sizeof(int));
int maxLen = 0;
for (int i=0; istring &str = v[i];
int vFrom = str[0] - '0';
int vTo = str[str.size()-1] - '0';

for(int j=0; j<26; ++j)
len[j][vTo] = max(len[j][vTo], len[j][vFrom]+len[vFrom][vTo])
maxLen = max(maxLen, len[vTo][vTo];
}
return maxLen;
}

【在 p*****2 的大作中提到】
: 给你一个字符串数组,你需要发现符合如下规律的一组字符串,使得这组字符串的字符
: 总数最大化
: 1. 第一个字符串的第一个字符是最后一个字符串的最后一个字符
: 2. 每一个字符串的最后一个字符是下一个字符串的第一个字符
: 找到的这组字符串的顺序不变,还是按照在初始数组的顺序排列。
: 例如
: input
: 3
: abc
: ca

avatar
l*8
19
grass, 我越看越不明白你的p是什么意思。 能不能给个例子解释一下?

【在 g***s 的大作中提到】
: 任何一个字符串,只考虑它的第一个后最后一个字母。
: 设p(a,b) 为第一个字母是a,最后一个字母是b的字符串数目。
: 这样,扫描一遍就可以算出所有的p。p的空间是26×26.
: 后面怎么处理都不难了。

avatar
q*y
20
高人啊。膜拜。

【在 g***s 的大作中提到】
: 任何一个字符串,只考虑它的第一个后最后一个字母。
: 设p(a,b) 为第一个字母是a,最后一个字母是b的字符串数目。
: 这样,扫描一遍就可以算出所有的p。p的空间是26×26.
: 后面怎么处理都不难了。

avatar
l*8
21
我看不懂啊。看懂了麻烦解释一下吧,谢谢!

【在 q***y 的大作中提到】
: 高人啊。膜拜。
avatar
t*j
22
先预处理,把所有头字母和尾字母相同的的单词,只取最长单词,其他去掉。
这样最多总共有26×26种可能性。然后图论算最长环路。
avatar
l*8
23
"找到的这组字符串的顺序不变,还是按照在初始数组的顺序排列。"
变成图之后就没办法保持这种顺序了。
另外,以a开头以b结尾的字符串应该能出现多个。

【在 t*****j 的大作中提到】
: 先预处理,把所有头字母和尾字母相同的的单词,只取最长单词,其他去掉。
: 这样最多总共有26×26种可能性。然后图论算最长环路。

avatar
t*j
24
哦哦哦,没仔细看题,没看到这要求.......

【在 l*********8 的大作中提到】
: "找到的这组字符串的顺序不变,还是按照在初始数组的顺序排列。"
: 变成图之后就没办法保持这种顺序了。
: 另外,以a开头以b结尾的字符串应该能出现多个。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。