文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给定一个字符串列表,你可以将这些字符串连接成一个循环字符串,对于每个字符串,你可以选择是否翻转它

在所有可能的循环字符串中,你需要分割循环字符串(这将使循环字符串变成一个常规的字符串),然后找到字典序最大的字符串。

具体来说,要找到字典序最大的字符串,你需要经历两个阶段:

  • 将所有字符串连接成一个循环字符串,你可以选择是否翻转某些字符串,并按照给定的顺序连接它们。
  • 在循环字符串的某个位置分割它,这将使循环字符串从分割点变成一个常规的字符串。

你的工作是在所有可能的常规字符串中找到字典序最大的一个。

示例:
输入: "abc", "xyz"
输出: "zyxcba"
解释: 你可以得到循环字符串 "-abcxyz-", "-abczyx-", "-cbaxyz-", "-cbazyx-",
其中 '-' 代表循环状态。
答案字符串来自第四个循环字符串,
你可以从中间字符 'a' 分割开然后得到 "zyxcba"。注意:
输入字符串只包含小写字母。
所有字符串的总长度不会超过 1,000。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/split-concatenated-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 首先求得每个字符串反转后是否比原来大,保留大的
  • 然后考虑从哪个字符串切开(还要考虑该字符串逆序的情况,因为要切开,不知道字典序大小),从其哪个位置切开
class Solution {public:string splitLoopedString(vector<string>& strs) {string rev, all;for(string& s : strs){rev = s;reverse(rev.begin(), rev.end());if(rev > s)//反转后的更大s = rev;}string ans, temp;for(int i = 0, j, k; i < strs.size(); ++i){  //从字符串 i 切开temp = "";for(j = i+1; j < strs.size(); ++j)temp += strs[j];//前部分是后面的 i+1, n-1for(j = 0; j < i; ++j)temp += strs[j];//接着是前面的 0, i-1for(j = 0; j <= strs[i].size(); ++j){rev = strs[i].substr(j)+temp+strs[i].substr(0,j);ans = max(ans, rev);}reverse(strs[i].begin(), strs[i].end());//还要考虑反转后的情况for(j = 0; j <= strs[i].size(); ++j){rev = strs[i].substr(j)+temp+strs[i].substr(0,j);ans = max(ans, rev);}reverse(strs[i].begin(), strs[i].end());//反转回去}return ans;}
};

184 ms 200.7 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 555. 分割连接字符串相关推荐

  1. LeetCode 1221. 分割平衡字符串

    1. 题目 在一个「平衡字符串」中,'L' 和 'R' 字符的数量是相同的. 给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串. 返回可以通过分割得到的平衡字符串的最大数量. 示例 1: 输 ...

  2. leetcode - 1221. 分割平衡字符串

    在一个「平衡字符串」中,'L' 和 'R' 字符的数量是相同的. 给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串. 返回可以通过分割得到的平衡字符串的最大数量. 示例 1: 输入:s = ...

  3. 2022-2-21 Leetcode 1221.分割平衡字符串

    class Solution {public:int balancedStringSplit(string s) {int cnt = 0;int res = 0;for(auto &ch : ...

  4. LeetCode 1616. 分割两个字符串得到回文串

    文章目录 1. 题目 2. 解题 1. 题目 给你两个字符串 a 和 b ,它们长度相同. 请你选择一个下标,将两个字符串都在 相同的下标 分割开. 由 a 可以得到两个字符串: aprefix 和 ...

  5. python脚本字符串拼接_Python脚本分割和连接字符串

    python脚本字符串拼接 This article gives an overview of Python Script functions to split strings and string ...

  6. LeetCode 685. 冗余连接 II(并查集)

    1. 题目 在本问题中,有根树指满足以下条件的有向图.该树只有一个根节点,所有其他节点都是该根节点的后继. 每一个节点只有一个父节点,除了根节点没有父节点. 输入一个有向图,该图由一个有着N个节点 ( ...

  7. LeetCode 684. 冗余连接(并查集)

    1. 题目 在本问题中, 树指的是一个连通且无环的无向图. 输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, -, N) 的树及一条附加的边构成.附加的边的两个顶点包含在1到N中间,这条附 ...

  8. jquery 逗号分割截取字符串_JS/JQUERY字符串截取分割匹配等处理汇总

    开发中常常会遇到各种字符串处理,汇总一下,备用. 1.字符串转换 var num = 19; // 19 var myStr = num.toString(); // "19" 你 ...

  9. 【leetcode】1849. 将字符串拆分为递减的连续值

    给你一个仅由数字组成的字符串 s . 请你判断能否将 s 拆分成两个或者多个 非空子字符串 ,使子字符串的 数值 按 降序 排列,且每两个 相邻子字符串 的数值之 差 等于 1 . 例如,字符串 s ...

最新文章

  1. 面试必备,Java线程状态之细节回顾
  2. 大盘点|6D姿态估计算法汇总(下)
  3. Python应用实战案例-一文通读时间序列在Python中的应用
  4. 反向Socket连接
  5. 【LeetCode笔记】剑指 Offer 21-. 调整数组顺序使奇数位于偶数前面(Java、双指针)
  6. upc 9325 序列本质
  7. 保护系统 用SVS为Windows穿上“层层”防弹衣
  8. RocketMQ(十六)RocketMQ消息存储机制
  9. android 截屏分享权限,android 截屏+保存图片+权限
  10. 求一元二次方程的解法c语言,有什么方法求一元二次方程求解決一元二次方程的解法要详细...
  11. 之江汇空间如何加音乐背景_添加QQ空间背景音乐添加图文教程
  12. 喜欢看漫画的小伙伴就不要错过啦,python批量爬取动漫免费看
  13. mysql 对视图的操作_Mysql中关于视图操作的详解
  14. 字体图标 fa fa html5,Font Awesome 4.2.0的所有图标参考
  15. 矩阵的Kronecker积、Khatri-Rao积、Hadamard积
  16. 建筑学专业申请计算机研究生吗,细说德国研究生申请之建筑学硕士
  17. 最容易理解的SVM算法原理
  18. 阿尔法小蛋机器人热点密码_科大讯飞阿尔法小蛋智能机器人使用说明
  19. 3800hk 黑鹰大米被抓视频报道
  20. Win10无法输入中文的解决方法

热门文章

  1. python高级编程技巧
  2. 【python】生成器
  3. sudo apt-get nmap 报错锁占用
  4. 模板vs定制 门店小程序该如何选择?
  5. 《你不知道的JavaScript》中卷 KYLE SIMPSON 著 单业 姜南 译
  6. checkbox保存和赋值
  7. 显示日期的指令: date
  8. /etc/fstab 参数详解及如何设置开机自动挂载
  9. js数组的拷贝赋值复制二三事总结
  10. 【leetcode刷题笔记】Excel Sheet Column Number