字符串删除字符的回文字符串
来源:互联网 发布:软件机器码修改 编辑:程序博客网 时间:2024/06/05 15:28
*问题:给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
分析:提到回文串,自然要利用回文串的特点,想到将源字符串逆转后,“回文串”(不一定连续)相当于顺序没变
求原字符串和其反串的最大公共子序列(不是子串,因为可以不连续)的长度(使用动态规划很容易求得),然后用原字符串的长度减去这个最大公共子串的长度就得到了最小编辑长度。
字符串逆转:
def reversal(str): return str[::-1]
求最长公共子序列
def subsequence(str1,str2): lena=len(str1) lenb=len(str2) c=[[0 for i in range(lenb+1)] for j in range(lena+1)] flag=[[0 for i in range(lenb+1)] for j in range(lena+1)] for i in range(lena): for j in range(lenb): if str1[i] == str2[j]: c[i+1][j+1] = c[i][j]+1 flag[i+1][j+1] = 'ok' elif c[i+1][j]>c[i][j+1]: c[i+1][j+1] = c[i+1][j] flag[i+1][j+1] = 'left' else: c[i+1][j+1]=c[i][j+1] flag[i+1][j+1] = 'up' return c[lena][lenb]
判断一个字符串是否是回文字符串
def panlindrome(str): length = len(str) if length %2 == 0: for i in range(int(length/2)): if str[i] != str[length-1-i]: return False; else: for i in range(int((length -1)/2)): if str[i] != str[length-1-i]: return False; return True
打印矩阵
def printLcs(flag,a,i,j): if i==0 or j==0: return if flag[i][j]=='ok': printLcs(flag,a,i-1,j-1) print(a[i-1],end='') elif flag[i][j]=='left': printLcs(flag,a,i,j-1) else: printLcs(flag,a,i-1,j)
阅读全文
1 0
- 字符串删除字符的回文字符串
- 给定字符串,删除最少的字符,使剩下的字符串成为回文串
- 删除最少字符 使字符串成为回文串
- 删除字符串重复的字符
- delete 删除字符串的字符
- 可删除某些字符的最长回文字符串(2016腾讯在线笔试题)
- 2016腾讯笔试题,删除字符串中的字符,使得剩下的字符串是回文串,如何删除使得回文串最长
- 2016腾讯笔试题,删除字符串中的字符,使得剩下的字符串是回文串,如何删除使得回文串最长
- 求两字符串最长公共子序列LCS的应用—删除字符串的字符剩下回文串
- 字符串中字符组成的回文字符串最小个数
- 添加最少的字符使整体字符串都是回文字符串
- STL学习-字符串回文判断以及实现删除字符串中重复字符最少字符
- 添加字符成为回文字符串
- 字符串中的最长回文字符
- 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
- 在一个非回文字符串后添加字符变成最短的回文字符串
- 删除字符串中的字符
- 删除字符串指定字符
- IO流中字节流,高效字节流
- js中const,var,let的区别
- 宏与宏函数
- java获取中文汉字的所有拼音代码分享
- Android进阶八:RecyclerView自动滚动
- 字符串删除字符的回文字符串
- 网络安装redhat7.2虚拟机
- 数学建模程序与方法之非线性规划
- 微信APP支付Java服务端
- 【12.12直播】北美KubeCon国内首轮深度解读!
- 条件编译
- JAVA基础:abstract class \ interface
- 刷题笔记:PAT真题在线练习数字分类
- 面向协议与面向对象的区别