C/C++编程题刷题:leetcode 1147. 段式回文
2020-08-23 10:01
211 查看
段式回文 其实与 一般回文 类似,只不过是最小的单位是 一段字符 而不是 单个字母。
举个例子,对于一般回文 "
abcba" 是回文,而 "
volvo" 不是,但如果我们把 "
volvo" 分为 "
vo"、"
l"、"
vo" 三段,则可以认为 “
(vo)(l)(vo)” 是段式回文(分为 3 段)。
给你一个字符串
text,在确保它满足段式回文的前提下,请你返回 段 的 最大数量
k。
如果段的最大数量为
k,那么存在满足以下条件的
a_1, a_2, ..., a_k:
- 每个
a_i
都是一个非空字符串; - 将这些字符串首位相连的结果
a_1 + a_2 + ... + a_k
和原始字符串text
相同; - 对于所有
1 <= i <= k
,都有a_i = a_{k+1 - i}
。
示例 1:
[code]输入:text = "ghiabcdefhelloadamhelloabcdefghi" 输出:7 解释:我们可以把字符串拆分成 "(ghi)(abcdef)(hello)(adam)(hello)(abcdef)(ghi)"。
示例 2:
[code]输入:text = "merchant" 输出:1 解释:我们可以把字符串拆分成 "(merchant)"。
示例 3:
[code]输入:text = "antaprezatepzapreanta" 输出:11 解释:我们可以把字符串拆分成 "(a)(nt)(a)(pre)(za)(tpe)(za)(pre)(a)(nt)(a)"。
示例 4:
[code]输入:text = "aaa" 输出:3 解释:我们可以把字符串拆分成 "(a)(a)(a)"。
[code]class Solution { public: int longestDecomposition(string text) { int res = 0; int pre = 0; int n=text.size(); for(int i = 0;i<n/2;i++){ if (text.substr(pre,i-pre+1) == text.substr(n-i-1,i-pre+1)) { res+=2; pre = i+1; } } if (n % 2 == 1 || pre < n / 2) ++res; return res; } };
相关文章推荐
- C/C++编程题刷题:leetcode 234. 回文链表
- C/C++编程题刷题:leetcode 199. 二叉树的右视图
- [C++]LeetCode 5: Longest Palindromic Substring(最长回文子串)
- 网易笔试编程题:统计回文(C++)
- C/C++编程题刷题:leetcode 104. 二叉树的最大深度
- C/C++编程题刷题:leetcode 958. 二叉树的完全性检验
- C/C++编程题刷题:leetcode 23 合并K个升序链表
- C++ LeetCode 5 最长回文子串
- C/C++编程题刷题:leetcode 543. 二叉树的直径
- C/C++编程题刷题:leetcode 814. 二叉树剪枝
- LeetCode :9 回文数 C++
- Leetcode(C++)——5. 最长回文子串
- 腾讯笔试编程题:构造回文(C++)
- C/C++编程题刷题:leetcode 796. 旋转字符串
- C/C++编程题刷题:leetcode415. 字符串相加
- 【LeetCode】回文数最快解法(C++),速度超过100%的人(4ms,8.8MB)
- LeetCode 5. 最长回文子串(C++)
- [C++]LeetCode: 99 Longest Palindromic Substring (最长回文子串)
- leetcode 5 最长回文子串 c++
- leetcode最长回文子串C++版