★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/11297775.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

Return the largest possible k such that there exists a_1, a_2, ..., a_k such that:

  • Each a_i is a non-empty string;
  • Their concatenation a_1 + a_2 + ... + a_k is equal to text;
  • For all 1 <= i <= k,  a_i = a_{k+1 - i}.

Example 1:

Input: text = "ghiabcdefhelloadamhelloabcdefghi"
Output: 7
Explanation: We can split the string on "(ghi)(abcdef)(hello)(adam)(hello)(abcdef)(ghi)".

Example 2:

Input: text = "merchant"
Output: 1
Explanation: We can split the string on "(merchant)".

Example 3:

Input: text = "antaprezatepzapreanta"
Output: 11
Explanation: We can split the string on "(a)(nt)(a)(pre)(za)(tpe)(za)(pre)(a)(nt)(a)".

Example 4:

Input: text = "aaa"
Output: 3
Explanation: We can split the string on "(a)(a)(a)". 

Constraints:

  • text consists only of lowercase English characters.
  • 1 <= text.length <= 1000

段式回文 其实与 一般回文 类似,只不过是最小的单位是 一段字符 而不是 单个字母。

举个例子,对于一般回文 "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:

输入:text = "ghiabcdefhelloadamhelloabcdefghi"
输出:7
解释:我们可以把字符串拆分成 "(ghi)(abcdef)(hello)(adam)(hello)(abcdef)(ghi)"。

示例 2:

输入:text = "merchant"
输出:1
解释:我们可以把字符串拆分成 "(merchant)"。

示例 3:

输入:text = "antaprezatepzapreanta"
输出:11
解释:我们可以把字符串拆分成 "(a)(nt)(a)(pre)(za)(tpe)(za)(pre)(a)(nt)(a)"。

示例 4:

输入:text = "aaa"
输出:3
解释:我们可以把字符串拆分成 "(a)(a)(a)"。 

提示:

  • text 仅由小写英文字符组成。
  • 1 <= text.length <= 1000

8ms
 1 class Solution {
 2     func longestDecomposition(_ text: String) -> Int {
 3         var result = 0
 4         var chars = Array(text)
 5         var n = text.count
 6         var l = ""
 7         var r = ""
 8         for i in 0..<n {
 9             l += String(chars[i])
10             r = String(chars[n-i-1]) + r
11             if l == r {
12                 result += 1
13                 l = ""
14                 r = ""
15             }
16         }
17         return result
18     }
19 }


Runtime: 12 ms

Memory Usage: 20.6 MB
 1 class Solution {
 2     func longestDecomposition(_ text: String) -> Int {
 3         let n:Int = text.count
 4         for i in 0..<(n/2)
 5         {
 6             if text.subString(0, i + 1) == (text.subString(n - 1 - i, n))
 7             {
 8                 return 2 + longestDecomposition(text.subString(i + 1, n - 1 - i))
 9             }
10         }
11         return (n == 0) ? 0 : 1
12     }
13 }
14 extension String {
15     // 截取字符串:指定索引和字符数
16     // - star: 开始索引
17     // - end: 结束索引
18     func subString(_ start:Int,_ end:Int) -> String {
19         let start = self.index(self.startIndex, offsetBy: start)
20         let end = self.index(self.startIndex, offsetBy: end)
21         return String(self[start..<end])
22     }
23 }


12ms 
 1 class Solution {
 2     func longestDecomposition(_ text: String) -> Int {
 3         let chars = Array(text)
 4         var l = chars.startIndex
 5         var r = chars.endIndex - 1
 6         let mid = (l + r + 1) / 2
 7         var ans = 0
 8
 9         while l < r {
10             let range = 0..<mid-l
11             var next  = range.upperBound
12             for i in range where chars[l...l+i] == chars[r-i...r] {
13                 next = i + 1
14                 ans += 2
15                 if l + i + 1 == r - i {
16                     return ans
17                 }else{
18                     break
19                 }
20             }
21             l += next
22             r -= next
23         }
24         return ans + 1
25     }
26 }


16ms

 1 class Solution {
 2     func longestDecomposition(_ text: String) -> Int {
 3         let s = Array(text)
 4         var result = 0
 5
 6         let end = s.endIndex - 1
 7         var i = s.startIndex
 8         var j = s.startIndex
 9
10         //ghiabcdefhelloadamhelloabcdefghi
11         while i <= end{
12             while j <= end {
13                 let range1 = i...(i+j)
14                 let range2 = (end-i-j)...(end-i)
15                 j += 1
16                 guard s[range1] == s[range2] else { continue }
17                 result += 1
18                 break
19             }
20
21             i += j
22             j = 0
23         }
24         return result
25     }
26 }

转载于:https://www.cnblogs.com/strengthen/p/11297775.html

[Swift]LeetCode1147. 段式回文 | Longest Chunked Palindrome Decomposition相关推荐

  1. LeetCode 1147. 段式回文(贪心)

    文章目录 1. 题目 2. 解题 1. 题目 段式回文 其实与 一般回文 类似,只不过是最小的单位是 一段字符 而不是 单个字母. 举个例子,对于一般回文 "abcba" 是回文, ...

  2. Bailian4067 回文数字(Palindrome Number)【数学】

    4067:回文数字(Palindrome Number) 总时间限制: 1000ms 内存限制: 65536kB 描述 给出一系列非负整数,判断是否是一个回文数.回文数指的是正着写和倒着写相等的数. ...

  3. 超全的回文题汇总-Palindrome

    最近做了好多回文类题目,一连串发现了好多,做了如下汇总: 1.判断单链表是否是回文 - Palindrome Linked List Time Complexity: O(n), Space Comp ...

  4. 回文串问题的克星——Palindrome Tree(回文树)/Palindrome Automaton(回文自动机)学习小记

    前言 最近B组有一道我不会的题,赶紧学习. 简介 我们知道,Manacher算法可以在 O(n) O ( n ) O(n)的时间内求出以每个位置为中心的最长回文串(虽然我昨天还不知道Manacher算 ...

  5. 洛谷 P1217 [USACO1.5]回文质数 Prime Palindrome

    嗯... 这道题对于蒟蒻的我来说实在是TQL... 先看一下题:(题目链接:https://www.luogu.org/problemnew/show/P1217) 然后说一下我的做题过程吧: 一看到 ...

  6. 用递归方法判断字符串是否是回文(Recursion Palindrome Python)

    所谓回文字符串,就是一个字符串从左到右读和从右到左读是完全一样的.比如:"level" ."aaabbaaa". "madam"." ...

  7. 数据结构之回文专题(Palindrome)

    今日整理数据结构时正好遇到了回文专题,接下来我们会选典型的回文数.回文单链表.回文子串进行探讨,编程语言随机为C或者java.首先我们来看回文数,如何判断一个整数位回文数呢?小白我的理解应该是:121 ...

  8. AK F.*ing leetcode 流浪计划之回文串

    欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击. 文章目录 一.简介 二.解题步骤 三.作用 四.经典算法介绍 判断一个串是否为回文串(单次查询) 普通情况 判断指定字符 多次子 ...

  9. 【ACM】奇怪的回文数

    题目链接:http://acm.nuc.edu.cn/OJ/contest/show/43/1008 [问题描述] "回文"是指正读反读都能读通的句子,它是古今中外都有的一种修辞方 ...

最新文章

  1. 学习用Pandas处理分类数据!
  2. FreeSwitch 的初始化及其模块加载过程
  3. JS获取当前时间的前n天/后n天
  4. LINUX设备模型BUS,DEVICE,DRIVER
  5. 问题:jquery给标签添加事件,但标签还未加载会成功吗
  6. IntelliJ IDEA添加jar包
  7. 不同路径(I和II)--动态规划
  8. python xlrd导入后怎么保存_Python xlrd模块导入过程及常用操作
  9. Android时间与服务器同步方法
  10. 计算机程序编程就业,计算机编程就业
  11. linux命令怎么查看日志文件,linux查看日志文件命令
  12. 在母亲节刷屏几天后,为母亲踏踏实实做点事
  13. 医学病理图像:细胞间质与间质细胞的区别
  14. jsGannt Improved在vue中的使用
  15. linux使用grep查找文件内容,Linux中使用grep命令搜索文件名及文件内容的方法
  16. 5+App和uni-app在App开发上有何区别?
  17. 关于Google AIY Kits,你需要知道的5个知识点!
  18. C++开发网络版斗地主游戏,附完整源码
  19. requests-爬取美女图片源码
  20. 未来计算机发展3000字,精选计算机实习报告范文3000字

热门文章

  1. 计算机活动天窗,玩出花样,天窗的正确打开方式
  2. java命令模式返回值_JAVA 设计模式 命令模式
  3. 快速排序 自带时间复杂度检测
  4. n阶幻方c语言编程,求单偶阶与双偶阶幻方编程思想及其算法!
  5. linux 的ip 设置lo_Linux服务器设置静态IP的方法
  6. python做自动化控制postman_python自动化测试入门篇-postman
  7. 为什么学习C语言这么久,看的懂代码,做不出题,写不出来项目?
  8. css vue 选项卡_vuejs实现标签选项卡动态更改css样式的方法
  9. mysql 支持json_MySQL 5.7 对 JSON 的支持
  10. 飞畅科技 光纤收发器的网管型和非网管型介绍