1930。唯一长度为 3 的回文子序列
难度:中等
主题:哈希表、字符串、位操作、前缀和
给定一个字符串 s,返回作为 s 的 子序列的长度为三的唯一回文数的数量。
注意即使有多种方式获得同一个子序列,仍然只计算一次。
回文是一个向前和向后读取相同的字符串。
字符串的子序列是在原字符串中删除一些字符(可以没有)而生成的新字符串,而不改变剩余字符的相对顺序。
- 例如,“ace”是“abcde”的子序列。
示例1:
- 输入: s = "aabca"
- 输出: 3
-
解释: 长度为 3 的 3 个回文子序列是:
- “aba”(“aabca”的子序列)
- “aaa”(“aabca”的子序列)
- “aca”(“aabca”的子序列)
示例2:
- 输入: s = "adc"
- 输出: 0
- 解释:“adc”中不存在长度为 3 的回文子序列。
示例 3:
- 输入: s = "bbcbaba"
- 输出: 4
-
解释: 4 个长度为 3 的回文子序列是:
- “bbb”(“bbcbaba”的子序列)
- “bcb”(“bbcbaba”的子序列)
- “bab”(“bbcbaba”的子序列)
- “aba”(“bbcbaba”的子序列)
约束:
- 3 5
- s 仅由小写英文字母组成。
提示:
- 长度为 3 的回文字符串的最大数量是多少?
- 我们如何跟踪出现在给定位置左侧的字符?
解决方案:
我们可以使用一种高效的算法,利用前缀和后缀字符跟踪来计算所有有效的回文子序列。
方法
跟踪前缀字符:
使用数组存储字符串中每个位置左侧遇到的字符集。这将有助于有效地检查一个字符是否可以构成回文子序列的第一部分。曲目后缀字符:
使用另一个数组来存储字符串中每个位置右侧遇到的字符集。这将有助于有效地检查一个字符是否可以构成回文子序列的第三部分。计算回文子序列:
对于字符串中的每个字符,将其视为长度为 3 的回文串的中间字符。检查前缀和后缀字符的所有有效组合以确定唯一的回文。商店结果:
使用哈希集存储唯一的回文子序列,确保不重复。
让我们用 PHP 实现这个解决方案:1930。唯一长度为 3 的回文子序列
<?php /** * @param String $s * @return Integer */ function countPalindromicSubsequence($s) { ... ... ... /** * go to ./solution.php */ } // Test cases echo countPalindromicSubsequence("aabca") . PHP_EOL; // Output: 3 echo countPalindromicSubsequence("adc") . PHP_EOL; // Output: 0 echo countPalindromicSubsequence("bbcbaba") . PHP_EOL; // Output: 4 ?>
解释:
-
前缀数组:
- 对于位置 i 处的每个字符,prefix[i] 存储索引 i 之前遇到的所有不同字符。
-
后缀数组:
- 对于位置 i 处的每个字符,suffix[i] 存储索引 i 之后遇到的所有不同字符。
-
中间字符:
- 将每个字符视为回文串的中间。对于与中间字符匹配的每个前缀和后缀字符的组合,形成一个长度为 3 的回文。
-
哈希映射:
- 使用关联数组 ($uniquePalindromes) 存储唯一的回文,确保不计算重复项。
复杂
-
时间复杂度:O(n)
- 遍历字符串两次来计算前缀和后缀数组。
- 第三次遍历检查有效的回文子序列。
-
空间复杂度:O(n)
- 用于前缀和后缀数组。
输出
代码为给定的示例生成正确的结果:
- 输入: "aabca" → 输出: 3
- 输入: "adc" → 输出: 0
- 输入:“bbcbaba”→ 输出:4
联系链接
如果您发现本系列有帮助,请考虑在 GitHub 上给 存储库 一个星号或在您最喜欢的社交网络上分享该帖子?。您的支持对我来说意义重大!
如果您想要更多类似的有用内容,请随时关注我:
- 领英
- GitHub
以上是唯一长度顺序子序列的详细内容。更多信息请关注PHP中文网其他相关文章!

TheSecretTokeEpingAphp-PowerEdwebSiterUnningSmoothlyShyunderHeavyLoadInVolvOLVOLVOLDEVERSALKEYSTRATICES:1)emplactopCodeCachingWithOpcachingWithOpCacheToreCescriptexecution Time,2)使用atabasequercachingCachingCachingWithRedataBasEndataBaseLeSendataBaseLoad,3)

你应该关心DependencyInjection(DI),因为它能让你的代码更清晰、更易维护。1)DI通过解耦类,使其更模块化,2)提高了测试的便捷性和代码的灵活性,3)使用DI容器可以管理复杂的依赖关系,但要注意性能影响和循环依赖问题,4)最佳实践是依赖于抽象接口,实现松散耦合。

是的,优化papplicationispossibleandessential.1)empartcachingingcachingusedapcutorediucedsatabaseload.2)优化的atabaseswithexing,高效Quereteries,and ConconnectionPooling.3)EnhanceCodeWithBuilt-unctions,避免使用,避免使用ingglobalalairaiables,并避免使用

theKeyStrategiestosiminificallyBoostphpapplicationPermenCeare:1)useOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)优化AtabaseInteractionswithPreparedStateTemtStatementStatementSandProperIndexing,3)配置

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增强codemodocultion,可验证性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

选择DependencyInjection(DI)用于大型应用,ServiceLocator适合小型项目或原型。1)DI通过构造函数注入依赖,提高代码的测试性和模块化。2)ServiceLocator通过中心注册获取服务,方便但可能导致代码耦合度增加。

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)启用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替换loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

phpemailvalidation invoLvesthreesteps:1)格式化进行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3汉化版
中文版,非常好用

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

Atom编辑器mac版下载
最流行的的开源编辑器