swapLexOrder
2024-06-02 10:00:03
给定一个字符串str
和字符串对应的可以交换位置的下表数组pairs
,求交换之后字典顺序最大的字符串(facebook笔试题).
- 题目可能说的不是很明了,看个例子就很清楚要做什么了
- 给定一个字符串str="abcd"
,可交换位置的下表数组为pairs=[[1,4],[3,4]]
,输出结果应该是swapLexOrder(str,pairs)="dbca"
- pairs=[[1,4],[3,4]]
告诉我们可以交换的位置是1
和4
或者3
和4
之间,这样可以说1
,3,
,4
之间是可以相互交换位置的,然后据此对字符串操作,"cbda"
,"cbad"
,"dbac"
,"dbca"
所以交换之后的指定位置按字典顺序排序后的字符串为”dbca"
.
验证代码(python)
def swapLexOrder(string, pairs):elems = list(string)connected = []for pair in pairs:current_con_ind = -1to_delete_ind = []for j in range(len(connected)):if pair[0] in connected[j] or pair[1] in connected[j]:if current_con_ind == -1:connected[j].extend(pair)connected[j] = sorted(list(set(connected[j])))current_con_ind = jelse:connected[current_con_ind].extend(connected[j])to_delete_ind.append(j)connected[current_con_ind].extend(pair)connected[current_con_ind] = sorted(list(set(connected[current_con_ind])))for d in to_delete_ind:del connected[d]if current_con_ind == -1:connected.append(sorted(pair))print connectedfor indeces in connected:substring = []for index in indeces:substring.append(string[index-1])substring = sorted(substring, reverse=True)for i in range(len(indeces)):elems[indeces[i]-1] = substring[i]return ''.join(elems)
提交代码(C++)
std::string swapLexOrder(std::string str, std::vector<std::vector<int>> pairs) {std::vector<int>del;std::vector<std::set<int>>indeies;for(size_t i=0;i<pairs.size();i++){int flag=-1;for(size_t j=0;j<indeies.size();j++){if(indeies[j].count(pairs[i][0])||indeies[j].count(pairs[i][1])){if(flag==-1){indeies[j].insert(pairs[i][0]);indeies[j].insert(pairs[i][1]);flag=j;}else{for(std::set<int>::iterator it=indeies[j].begin();it!=indeies[j].end();it++){indeies[flag].insert(*it);}del.push_back(j);}}}for(size_t k=0;k<del.size();k++){indeies.erase(indeies.begin()+del[k]-k);}if(flag==-1){std::set<int>oIndex;oIndex.insert(pairs[i][0]);oIndex.insert(pairs[i][1]);indeies.push_back(oIndex);}del.clear();}for(size_t i=0;i<indeies.size();i++){std::vector<char>subStr;for(std::set<int>::iterator it=indeies[i].begin();it!=indeies[i].end();it++){subStr.push_back(str[*it-1]);}sort(subStr.begin(),subStr.end());int j=subStr.size()-1;for(std::set<int>::iterator it=indeies[i].begin();it!=indeies[i].end();it++){str[*it-1]=subStr[j--];}}return str; }
refer
[1] https://codefights.com/interview-practice/task/5vXzdE9yzjsoMZ9sk
swapLexOrder相关推荐
最新文章
- 服务器架构之性能扩展-第七章(8)
- AAAI Fellow 2019名单公布!罗杰波、刘欢等人入选
- 利用 livy 远程提交 spark作业
- 阿里开始招聘.NET,要求WPF!
- 论文解读丨LayoutLM: 面向文档理解的文本与版面预训练
- 腾讯云安全:移动 APP 安全行业报告
- java求字符串数组交集、并集和差集
- 客户端之H5拉起第三方app并跳转到指定页面
- [luogu P2183] [国家集训队]礼物 {exlucas}
- pc安装android,在电脑上安装安卓的过程
- 谷歌gmail注册入口_如何更改,恢复,重设Gmail,Google云端硬盘,Android,Chrome的Google帐户密码?...
- 腾讯会议如何使用讲演者模式进行汇报(nian gao)
- 浅谈大数据时代web数据可视化探析
- php采集今日头条出现问题,PHP采集今日头条内容页时,解析页面上的JS转为json
- MATLAB颜色的使用(转)
- Supervisor(四)
- 测试脂肪的软件叫,智能健康监测app
- 剑指Offer面试题解总结21-30
- 022 利用头皮脑电信号预测癫痫发作2021
- CSDN的草稿箱在哪?/CSDN中如何看到上次写到一半未发布的文章呢?
热门文章
- bzoj 1056 1862: [Zjoi2006]GameZ游戏排名系统(Treap+Hash)
- manacher算法--最长回文子串
- 1_Small Data Challenges in Big Data Era
- opencv cv.waitKey(60) 0xff 含义和作用
- Echarts数据可视化parallel平行坐标系,开发全解+完美注释
- 汇编语言上机考试三星题——加密的key和明文字符串(二)
- 消息中间件解决方案-JMS-ActiveMQ
- 【Git基础笔记】常用命令
- PAT-乙级-1035 插入与归并
- 解决百度 ueditor v1.4.3 编辑器上传图片失真的bug?