给定一个字符串str和字符串对应的可以交换位置的下表数组pairs,求交换之后字典顺序最大的字符串(facebook笔试题).
- 题目可能说的不是很明了,看个例子就很清楚要做什么了
- 给定一个字符串str="abcd",可交换位置的下表数组为pairs=[[1,4],[3,4]],输出结果应该是swapLexOrder(str,pairs)="dbca"
- pairs=[[1,4],[3,4]]告诉我们可以交换的位置是14或者34之间,这样可以说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相关推荐

最新文章

  1. 服务器架构之性能扩展-第七章(8)
  2. AAAI Fellow 2019名单公布!罗杰波、刘欢等人入选
  3. 利用 livy 远程提交 spark作业
  4. 阿里开始招聘.NET,要求WPF!
  5. 论文解读丨LayoutLM: 面向文档理解的文本与版面预训练
  6. 腾讯云安全:移动 APP 安全行业报告
  7. java求字符串数组交集、并集和差集
  8. 客户端之H5拉起第三方app并跳转到指定页面
  9. [luogu P2183] [国家集训队]礼物 {exlucas}
  10. pc安装android,在电脑上安装安卓的过程
  11. 谷歌gmail注册入口_如何更改,恢复,重设Gmail,Google云端硬盘,Android,Chrome的Google帐户密码?...
  12. 腾讯会议如何使用讲演者模式进行汇报(nian gao)
  13. 浅谈大数据时代web数据可视化探析
  14. php采集今日头条出现问题,PHP采集今日头条内容页时,解析页面上的JS转为json
  15. MATLAB颜色的使用(转)
  16. Supervisor(四)
  17. 测试脂肪的软件叫,智能健康监测app
  18. 剑指Offer面试题解总结21-30
  19. 022 利用头皮脑电信号预测癫痫发作2021
  20. CSDN的草稿箱在哪?/CSDN中如何看到上次写到一半未发布的文章呢?

热门文章

  1. bzoj 1056 1862: [Zjoi2006]GameZ游戏排名系统(Treap+Hash)
  2. manacher算法--最长回文子串
  3. 1_Small Data Challenges in Big Data Era
  4. opencv cv.waitKey(60) 0xff 含义和作用
  5. Echarts数据可视化parallel平行坐标系,开发全解+完美注释
  6. 汇编语言上机考试三星题——加密的key和明文字符串(二)
  7. 消息中间件解决方案-JMS-ActiveMQ
  8. 【Git基础笔记】常用命令
  9. PAT-乙级-1035 插入与归并
  10. 解决百度 ueditor v1.4.3 编辑器上传图片失真的bug?