[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 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运用PyTorch动手搭建一个共享单车预测器

本文摘自 《深度学习原理与PyTorch实战》 我们将从预测某地的共享单车数量这个实际问题出发&#xff0c;带领读者走进神经网络的殿堂&#xff0c;运用PyTorch动手搭建一个共享单车预测器&#xff0c;在实战过程中掌握神经元、神经网络、激活函数、机器学习等基本概念&#xff0…

jax-rs jax-ws_通过JAX-WS Provider在Web服务中利用MOXy

jax-rs jax-ws在以前的文章中&#xff0c;我演示了如何将EclipseLink JAXB&#xff08;MOXy&#xff09;直接集成到WebLogic&#xff08;从12.1.1开始&#xff09;和GlassFish&#xff08;从3.1.2开始&#xff09;的JAX-WS实现中 。 在本文中&#xff0c;我将演示如何通过使用J…

3个经常被忽略的APM关键功能

APM核心功能已不再足够。 市场领先的应用超越了以往&#xff0c;设置了其他人必须匹配的新标准。 每当任何针对消费者或企业的Web应用程序达到新的性能峰值时&#xff0c;都会为用户期望值设定基准。 这可能不公平或不合理&#xff0c;但这就是市场运作的方式。 当某人出于个…

NOIP模拟测试13「矩阵游戏·跳房子·优美序列」

矩阵游戏 考试时思路一度和正解一样&#xff0c;考试到最后还是打了80分思路&#xff0c;结果80分打炸了只得了40分暴力分 题解 算出来第一列的总值&#xff0c;每次通过加每两列之间的差值得出下一列的总值 算第一列我们只需要让当前点*行增倍的数量就行了 for(ll i1;i<n;i…

一次测试

$\leq$ $\in[x,y]$ 转载于:https://www.cnblogs.com/znsbc-13/p/11304153.html

java的xml面试题_Java程序员的10个XML面试问答

java的xml面试题XML面试问题在各种编程工作面试中非常受欢迎&#xff0c;包括针对Web开发人员的Java面试 。 XML是一项成熟的技术&#xff0c;通常用作从一个平台传输数据的标准。 XML面试问题包含来自各种XML技术&#xff08;例如XSLT&#xff09;的问题&#xff0c;该技术用于…

【chromium】 Chromium OS的oom机制

前一段时间&#xff0c;运行在Chromium OS上的一个相机应用经常会自己崩溃&#xff0c;进程戛然而止&#xff0c;测试过程中发现使用的内存以肉眼可见的内存增长&#xff0c;当增长到1G左右&#xff0c;应用窗口突然消失&#xff0c;虽然原因不明&#xff0c;但是能猜到个大概&…

了解java.nio.file.Path – 2

在本文的第1部分中&#xff0c;我们研究了java.nio.file.Path类中的大多数API。 在本文中&#xff0c;我们将介绍其余的API。 使用register&#xff08;&#xff09; 该API允许我们注册java.nio.file.WatchService接口的实现&#xff0c;该接口将侦听目录创建&#xff0c;修改…

欧几里德算法求最大公约数

在求两个数的最大公约数方法中&#xff0c; 辗转相除法是比较快的一种方法。 也就是著名的欧几里德方法。 View Code int Gcd(int a, int b){return b0?a:gcd(b, a%b); } View Code #include "iostream"#include "cstdio"#include "cstring"#…

__reduce__

一、__reduce__()介绍 当定义扩展类型时&#xff08;也就是使用Python的C语言API实现的类型&#xff09;&#xff0c;如果你想pickle它们&#xff0c;你必须告诉Python如何pickle它们。 __reduce__ 被定义之后&#xff0c;当对象被Pickle时就会被调用。它要么返回一个代表全局名…

camel.js_Camel 2.11 –具有URL重写功能的HTTP代理路由

camel.js在即将发布的Apache Camel 2.11版本中&#xff0c;我最近添加了对将自定义url重写实现插入基于HTTP的路由&#xff08;http&#xff0c;http4&#xff0c;jetty&#xff09;的支持。 当您使用骆驼代理/桥接HTTP路由时&#xff0c;这使人们可以控制url映射。 例如&…

问题 1044: [编程入门]三个字符串的排序

题目描述输入三个字符串&#xff0c;按由小到大的顺序输出输入3行字符串输出按照从小到大输出成3行样例输入cde afg abc样例输出abc afg cde分析&#xff1a;可以使用java自带方法compareTo()进行两两比较&#xff0c;首先输入三个字符串a,b,c用a和b比较&#xff0c;如果a的值比…

使用JUnit 5进行更清洁的参数化测试

参数化单元测试的总体思路是对不同的数据运行相同的测试方法。 在JUnit 4中创建参数化测试远非完美。 现有体系结构存在许多问题&#xff1a;将参数定义为类字段&#xff0c;并且需要使用构造函数来创建它们&#xff0c;不能将参数化和非参数化测试混合在一个测试类中&#xff…

问题 1045: [编程入门]自定义函数之整数处理

题目描述输入10个整数&#xff0c;将其中最小的数与第一个数对换&#xff0c;把最大的数与最后一个数对换。写三个函数&#xff1b; ①输入10个数&#xff1b;②进行处理&#xff1b;③输出10个数。输入10个整数输出整理后的十个数&#xff0c;每个数后跟一个空格&#xff08;注…

我曾经是怎么做面试官的

阅读提示 更新于2019年2月3日&#xff1a;本文过于注重技巧&#xff0c;很多内容笔者已不再使用。这是成长的必经过程&#xff0c;正如独孤求败的剑术精进之路&#xff0c;先注重技巧&#xff0c;再内化&#xff0c;变得不拘泥于形式。 纵然本文内容已不完全与笔者真正的面试风…

大数据摄取:Flume,Kafka和NiFi

初赛 在构建大数据管道时&#xff0c;我们需要考虑如何吸收出现在通常是Hadoop生态系统大门口的数据量&#xff0c;多样性和速度。 在决定采用哪种工具来满足我们的要求时&#xff0c;诸如可伸缩性&#xff0c;可靠性&#xff0c;适应性&#xff0c;开发时间成本等方面的初步考…

__repr__

class Item: def __init__ (self, name, price): self.name name self.price price # 创建一个Item对象&#xff0c;将之赋给im变量 im Item(鼠标, 29.8) # 打印im所引用的Item对象 print(im) 先看下面程序&#xff1a; 上面程序创建了一个 Item 对象&#xff0c;然后使用 p…

__getattribute__

在类 里面,其实并没有方法这个东西,所有的东西都保存在属性里面,所谓的调用方法其实是类里面的一个同名属性指向了一个函数(方法),返回的是函数的引用,再用 函数() 这种方式就可以调用它 在调用实例的方法的时候,实际上给对象传过去的只是一个字符串而已, 比如 t Test()…

使用精确的Java方法参数

了解如何在Java应用程序中选择正确的方法参数类型并获得更健壮和更短的代码。 我们Java开发人员通常有一个使用方法参数的坏习惯&#xff0c;即不考虑实际需要什么&#xff0c;而只是选择我们习惯的&#xff0c;可用的或首先想到的东西。 考虑以下代表性示例&#xff1a; pri…

Android external storage

File sdCard Environment.getExternalStorageDirectory(); File directory_pictures new File(sdCard, "Pictures"); Log.i(TAG,"directory_pictures"directory_pictures); 存储在external storage 这类文件不应该存在SD卡的根目录下&#xff0c;而应该存…