给定一个字符串,你可以在其任何位置插入新字符,请你算出要把这个字符串变成回文字符串最少需要几次插入操作。 数据范围:字符串的长度满足 ,字符串中仅包含小写的英文字母

区块链毕设网qklbishe.com为您提供问题的解答

给定一个字符串,你可以在其任何位置插入新字符,请你算出要把这个字符串变成回文字符串最少需要几次插入操作。
数据范围:字符串的长度满足 给定一个字符串,你可以在其任何位置插入新字符,请你算出要把这个字符串变成回文字符串最少需要几次插入操作。          数据范围:字符串的长度满足  ,字符串中仅包含小写的英文字母 ,字符串中仅包含小写的英文字母

# -*- coding: utf-8 -*-  class Solution:     """     题目:         https://www.nowcoder.com/practice/bae2652b4db04a438368238498e4c13e?tpId=196&tqId=40507&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3FjudgeStatus%3D3%26page%3D1%26pageSize%3D50%26search%3D%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D196&difficulty=undefined&judgeStatus=3&tags=&title=     参考:         https://leetcode.cn/problems/minimum-insertion-steps-to-make-a-string-palindrome/solution/rang-zi-fu-chuan-cheng-wei-hui-wen-chuan-de-zui--2/     算法:         题目要求计算让字符串成为回文串的最少插入次数。我们可以换个思路,如果我们知道字符串s中最长回文子序列,长度为m,那么剩余的字符就是破坏字符串s成为回文串的字符,我们只需要在对应位置添加n - m个字符就可以使s成为回文串。         比如:             字符串长度为偶数:s = "ab", n = 2, m = 1, 需要添加的字符数为n - m = 1,"ab" -> "aba" 或者 "bab"             字符串长度为奇数,s = "abc", n = 3, m = 1,需要添加的字符数为n - m = 3 - 1 = 2,"abc" -> "cbabc"         因此本题的关键在于,计算字符串s的最长回文子序列。而字符串s的最长回文子序列问题又可以转换为字符串s 与 其翻转字符串t = s[::-1]的最长公共子序列。         设dp[i][j]表示字符串s的前i个字符与字符串t的前j个字符的最长公共子序列。         边界条件:             dp[0][0] = 0             dp[0][j] = 0             dp[i][0] = 0         状态转移方程:             如果s[i - 1] == t[j - 1]:                 dp[i][j] = max(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1] + 1)             否则:                  dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])     复杂度:         时间复杂度:O(n^2), n为字符串s的长度         空间复杂度:O(n^2),辅助空间dp     """      def minInsert(self, str):         # write code here         t, n = str[::-1], len(str)          dp = [[0] * (n + 1) for _ in range(n + 1)]         maxLen = 0         for i in range(1, n + 1):             for j in range(1, n + 1):                 dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])                 if str[i - 1] == t[j - 1]:                     dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + 1)                 maxLen = max(maxLen, dp[i][j])          return n - maxLen   if __name__ == "__main__":     sol = Solution()      s = "nowcoder"      # s = "aaa"      res = sol.minInsert(s)      print res 

10:53

以上就是关于问题给定一个字符串,你可以在其任何位置插入新字符,请你算出要把这个字符串变成回文字符串最少需要几次插入操作。
数据范围:字符串的长度满足 ,字符串中仅包含小写的英文字母的答案

欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。

区块链NFT链游项目方科学家脚本开发培训

从业7年-专注一级市场


微信:btc9767
TELEGRAM :https://t.me/btcok9

具体资料介绍

web3的一级市场千万收益的逻辑


进群点我



qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 给定一个字符串,你可以在其任何位置插入新字符,请你算出要把这个字符串变成回文字符串最少需要几次插入操作。 数据范围:字符串的长度满足 ,字符串中仅包含小写的英文字母