[Swift]LeetCode1147. 段式回文 | Longest Chunked Palindrome Decomposition
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(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 totext
; - 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
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
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相关推荐
- LeetCode 1147. 段式回文(贪心)
文章目录 1. 题目 2. 解题 1. 题目 段式回文 其实与 一般回文 类似,只不过是最小的单位是 一段字符 而不是 单个字母. 举个例子,对于一般回文 "abcba" 是回文, ...
- Bailian4067 回文数字(Palindrome Number)【数学】
4067:回文数字(Palindrome Number) 总时间限制: 1000ms 内存限制: 65536kB 描述 给出一系列非负整数,判断是否是一个回文数.回文数指的是正着写和倒着写相等的数. ...
- 超全的回文题汇总-Palindrome
最近做了好多回文类题目,一连串发现了好多,做了如下汇总: 1.判断单链表是否是回文 - Palindrome Linked List Time Complexity: O(n), Space Comp ...
- 回文串问题的克星——Palindrome Tree(回文树)/Palindrome Automaton(回文自动机)学习小记
前言 最近B组有一道我不会的题,赶紧学习. 简介 我们知道,Manacher算法可以在 O(n) O ( n ) O(n)的时间内求出以每个位置为中心的最长回文串(虽然我昨天还不知道Manacher算 ...
- 洛谷 P1217 [USACO1.5]回文质数 Prime Palindrome
嗯... 这道题对于蒟蒻的我来说实在是TQL... 先看一下题:(题目链接:https://www.luogu.org/problemnew/show/P1217) 然后说一下我的做题过程吧: 一看到 ...
- 用递归方法判断字符串是否是回文(Recursion Palindrome Python)
所谓回文字符串,就是一个字符串从左到右读和从右到左读是完全一样的.比如:"level" ."aaabbaaa". "madam"." ...
- 数据结构之回文专题(Palindrome)
今日整理数据结构时正好遇到了回文专题,接下来我们会选典型的回文数.回文单链表.回文子串进行探讨,编程语言随机为C或者java.首先我们来看回文数,如何判断一个整数位回文数呢?小白我的理解应该是:121 ...
- AK F.*ing leetcode 流浪计划之回文串
欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击. 文章目录 一.简介 二.解题步骤 三.作用 四.经典算法介绍 判断一个串是否为回文串(单次查询) 普通情况 判断指定字符 多次子 ...
- 【ACM】奇怪的回文数
题目链接:http://acm.nuc.edu.cn/OJ/contest/show/43/1008 [问题描述] "回文"是指正读反读都能读通的句子,它是古今中外都有的一种修辞方 ...
最新文章
- 学习用Pandas处理分类数据!
- FreeSwitch 的初始化及其模块加载过程
- JS获取当前时间的前n天/后n天
- LINUX设备模型BUS,DEVICE,DRIVER
- 问题:jquery给标签添加事件,但标签还未加载会成功吗
- IntelliJ IDEA添加jar包
- 不同路径(I和II)--动态规划
- python xlrd导入后怎么保存_Python xlrd模块导入过程及常用操作
- Android时间与服务器同步方法
- 计算机程序编程就业,计算机编程就业
- linux命令怎么查看日志文件,linux查看日志文件命令
- 在母亲节刷屏几天后,为母亲踏踏实实做点事
- 医学病理图像:细胞间质与间质细胞的区别
- jsGannt Improved在vue中的使用
- linux使用grep查找文件内容,Linux中使用grep命令搜索文件名及文件内容的方法
- 5+App和uni-app在App开发上有何区别?
- 关于Google AIY Kits,你需要知道的5个知识点!
- C++开发网络版斗地主游戏,附完整源码
- requests-爬取美女图片源码
- 未来计算机发展3000字,精选计算机实习报告范文3000字
热门文章
- 计算机活动天窗,玩出花样,天窗的正确打开方式
- java命令模式返回值_JAVA 设计模式 命令模式
- 快速排序 自带时间复杂度检测
- n阶幻方c语言编程,求单偶阶与双偶阶幻方编程思想及其算法!
- linux 的ip 设置lo_Linux服务器设置静态IP的方法
- python做自动化控制postman_python自动化测试入门篇-postman
- 为什么学习C语言这么久,看的懂代码,做不出题,写不出来项目?
- css vue 选项卡_vuejs实现标签选项卡动态更改css样式的方法
- mysql 支持json_MySQL 5.7 对 JSON 的支持
- 飞畅科技 光纤收发器的网管型和非网管型介绍