Redian新闻
>
download 封 Qiu 在 Stock 版 (转载)
avatar
download 封 Qiu 在 Stock 版 (转载)# Stock
m*o
1
大牛们给个思路,前段时间另一道题的逆转。
Given an string array sorted by characters in another string.
Return that sorting base string.
Example. give you
{foo, cat, cao, bag, bat, aac}
return: fcbagto
avatar
d*d
2
【 以下文字转载自 Notice 讨论区 】
发信人: deliver (自动发信系统), 信区:
标 题: download 封 Qiu 在 Stock 版
发信站: BBS 未名空间站自动发信系统 (Mon May 31 19:45:40 2010)
【此篇文章是由自动发信系统所张贴】
由于 Qiu 在 Stock 版的 谩骂攻击他人 行为,
被暂时取消在本版的发文权力 3 天。
版主:download
Mon May 31 19:45:40 2010
avatar
f*b
3
给字符串数组建图,然后求拓扑排序,返回排序结果即可
avatar
m*o
4
谢谢大牛,再问一下这个题的 sample code。

【在 f***b 的大作中提到】
: 给字符串数组建图,然后求拓扑排序,返回排序结果即可
avatar
r*7
5
首先这个结果不唯一,而且可能性很多,只能取一个
按位比较然后得到一个字符的有向图然后拓扑排序吧

【在 m***o 的大作中提到】
: 大牛们给个思路,前段时间另一道题的逆转。
: Given an string array sorted by characters in another string.
: Return that sorting base string.
: Example. give you
: {foo, cat, cao, bag, bat, aac}
: return: fcbagto

avatar
f*t
7
// Given an string array sorted by characters in another string.
// Return that sorting base string.
// Example. give you
// {foo, cat, cao, bag, bat, aac}
// return: fcbagto
void buildGraph(vector &vs, unsigned col, unsigned up, unsigned down,
map> &res) {
char pre = '#';
unsigned count = 0;
unsigned uu = up;
for (unsigned i = up; i < down; ++i) {
if (vs[i].size() <= col) {
break;
}
if (vs[i][col] == pre) {
++count;
} else {
if (count > 1) {
buildGraph(vs, col + 1, uu, i, res);
}
if (pre != '#') {
res[pre].insert(vs[i][col]);
}
pre = vs[i][col];
count = 1;
uu = i;
}
}
if (count > 1) {
buildGraph(vs, col + 1, uu, down, res);
}
}
map> revert(const map> &mp) {
map> res;
for (auto item : mp) {
for (char c : item.second) {
res[c].insert(item.first);
}
if (res.find(item.first) == res.end()) {
res[item.first] = set();
}
}
return res;
}
void topoErase(map> &mp, map> &re,
char c, vector &res) {
res.push_back(c);
re.erase(re.find(c));
for (char child : mp[c]) {
re[child].erase(c);
if (re[child].empty()) {
topoErase(mp, re, child, res);
}
}
mp.erase(mp.find(c));
}
string topoSort(map> &mp) {
map> re = revert(mp);
vector vc;
while (!re.empty()) {
for (auto item : re) {
if (item.second.empty()) {
topoErase(mp, re, item.first, vc);
break;
}
}
}
return string(vc.begin(), vc.end());
}
string charOrder(vector &vs) {
map> mp;
buildGraph(vs, 0, 0, vs.size(), mp);
return topoSort(mp);
}
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。