pythonjava回文数算法问题

gccmx 的BLOG
用户名:gccmx
文章数:43
评论数:19
访问量:16496
注册日期:
阅读量:5863
阅读量:12276
阅读量:313948
阅读量:1028026
51CTO推荐博文
Given a string&S, find the longest palindromic substring in&S. You may assume that the maximum length of&S&is 1000, and there exists one unique longest palindromic substring.穷举法取出所有的子串组合,挨个判断,返回最长的class&Solution(object):
&&&&def&isPalindrome(self,&s,&start,&end):
&&&&&&&&while&start&&&end:
&&&&&&&&&&&&if&s[start]&!=&s[end]:
&&&&&&&&&&&&&&&&return&False
&&&&&&&&&&&&start&+=&1
&&&&&&&&&&&&end&-=&1
&&&&&&&&return&True
&&&&def&longestPalindrome(self,&s):
&&&&&&&&"""
&&&&&&&&:type&s:&str
&&&&&&&&:rtype:&str
&&&&&&&&"""
&&&&&&&&max,&left,&right&=&0,&0,&0
&&&&&&&&for&i&in&range(len(s)):
&&&&&&&&&&&&j&=&i+1
&&&&&&&&&&&&while&j&&&len(s):
&&&&&&&&&&&&&&&&if&self.isPalindrome(s,&i,&j):
&&&&&&&&&&&&&&&&&&&&if&(j-i+1)&&&max:
&&&&&&&&&&&&&&&&&&&&&&&&left,&right&=&i,&j
&&&&&&&&&&&&&&&&&&&&&&&&max&=&j&-&i&+&1
&&&&&&&&&&&&&&&&j&+=&1
&&&&&&&&print&left,&right,&max
&&&&&&&&return&s[left:right+1]双指针两边扩展遍历指针为i, j=i+1, i左移,j右移。判断是否相等将长度,下标赋给临时变量,最后切片返回。唯一的大坑。回文字符串长度可以是奇数也可以是偶数。奇数的时候,内层循环从i-1开始。边界条件也需要处理好。class&Solution(object):
&&&&def&longestPalindrome(self,&s):
&&&&&&&&"""
&&&&&&&&:type&s:&str
&&&&&&&&:rtype:&str
&&&&&&&&"""
&&&&&&&&n&=&len(s)
&&&&&&&&maxL,&maxR,&max&=&0,&0,&0
&&&&&&&&for&i&in&range(n):
&&&&&&&&&&&&#&长度为偶数的回文字符串
&&&&&&&&&&&&start&=&i
&&&&&&&&&&&&end&=&i&+&1
&&&&&&&&&&&&while&start&&=&0&and&end&&&n:
&&&&&&&&&&&&&&&&if&s[start]&==&s[end]:
&&&&&&&&&&&&&&&&&&&&if&end&-&start&+&1&&&max:
&&&&&&&&&&&&&&&&&&&&&&&&max&=&end&-&start&+&1
&&&&&&&&&&&&&&&&&&&&&&&&maxL&=&start
&&&&&&&&&&&&&&&&&&&&&&&&maxR&=&end
&&&&&&&&&&&&&&&&&&&&start&-=&1
&&&&&&&&&&&&&&&&&&&&end&+=&1
&&&&&&&&&&&&&&&&else:
&&&&&&&&&&&&&&&&&&&&break
&&&&&&&&&&&&#&长度为奇数的回文子串
&&&&&&&&&&&&start&=&i&-&1
&&&&&&&&&&&&end&=&i&+&1
&&&&&&&&&&&&while&start&&=&0&and&end&&&n:
&&&&&&&&&&&&&&&&if&s[start]&==&s[end]:
&&&&&&&&&&&&&&&&&&&&if&end&-&start&+&1&&&max:
&&&&&&&&&&&&&&&&&&&&&&&&max&=&end&-&start&+&1
&&&&&&&&&&&&&&&&&&&&&&&&maxL&=&start
&&&&&&&&&&&&&&&&&&&&&&&&maxR&=&end
&&&&&&&&&&&&&&&&&&&&start&-=&1
&&&&&&&&&&&&&&&&&&&&end&+=&1
&&&&&&&&&&&&&&&&else:
&&&&&&&&&&&&&&&&&&&&break
&&&&&&&&return&s[maxL:maxR+1]本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)求判断回文数的算法
[问题点数:45分,结帖人qyshooter]
求判断回文数的算法
[问题点数:45分,结帖人qyshooter]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2004年12月 C/C++大版内专家分月排行榜第二2005年1月 Linux/Unix社区大版内专家分月排行榜第二
2004年6月 Linux/Unix社区大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。判断输入的是否是回文数 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 20时,
&无详细内容&
代码片段(1)
1.&[代码][Python]代码&&&&
Python语言: 判断输入的是否是回文数
#! /usr/bin/env python
#coding=utf-8
a = input()
b = str(a)
flag = True
for i in range(len(b)/2):
if b[i]!=b[len(b)-i-1]:
flag = False
print "%d is huiwen number!" % a
print "%d is not huiwen number!" % a
开源中国-程序员在线工具:
开源从代码分享开始
hcqenjoy的其它代码python判断字符串是否是回文结构 - 实验交流 - 生物秀
标题: python判断字符串是否是回文结构
摘要: [python判断字符串是否是回文结构]Dec 11, 2010回文(Palindrome),就是一个序列(如字符串)正着读反着读是一样的。生物信息(bioinformation)学上最常见的就是转录因子在DNA上的结合位点通常都是回文结构。个么如何判断一个字符串是回文结构呢?在MIT Introduction to CS and Programming Lec 4 (39:38) 里,介绍了递归的方法:def isPalindrome(s):if len…… [本文关键词:回文结构 复杂度 生物信息 转录因子]……
Dec 11, 2010
回文(Palindrome),就是一个序列(如字符串)正着读反着读是一样的。信息(bioinformation)学上最常见的就是转录因子在DNA上的结合位点通常都是回文结构。
个么如何判断一个字符串是回文结构呢?在MIT Introduction to CS and Programming Lec 4 (39:38) 里,介绍了递归的方法:
def isPalindrome(s):
if len(s) = 1:
return True
return s[0] == s[-1] and isPalindrome(s[1:-1])
其实完全可以用循环实现,复杂度是一样的:
def isPalindrome1(s):
for i in range(len(s))/2:
if not s[i] == s[len(s)-i-1]:
return False
return True
不过其实我们都被忽悠啦,在Python里可以很容易的从回文的定义来判断,就是字符串的倒序和字符串本身是一样的话,就是回文。
def isPalindrome2(s):
return s == s[::-1]
以上的实现复杂度也是O(n)的,不过是python内部用C语言实现的,猜测会比前2个方法快。
总之这又是一个递归的失败的例子,斐波那契数列是另一个,递归的方法比循环的方法要慢很多。唯一我知道的递归是最适用的方法的就是汉诺塔了。跑题了,不多说了。。
相关热词:
生物秀是目前国内最具影响力的生物医药门户网站之一,致力于IT技术和BT的跨界融合以及生物医药领域前沿技术和成功商业模式的传播。为生物医药领域研究人员和企业提供最具价值的行业资讯、专业技术、学术交流平台、会议会展、电子商务和求职招聘等一站式服务。
官方微信号:shengwuxiu
电话:021-python回文数字编程方法
题目是叫编写一个三位数乘于三位数的回文数字列表,其中最大的一个。回文,即从左到右,和从右到左看,数字都是一样,比如1234321。
我的代码如下:
#!/usr/lib/python2.7
#coding:utf8
def is_doc(x): &#判断回文的函数
& & list1 = []
& & list2 = []
& & for i in str(x):
list1.append(i)
list2.append(i)
& & list2.reverse()
& & if list1 == list2:
def list_once(y):#去掉列表中重复的元素
& & list_new = []
& & for i in
xrange(len(y)):
& if y[i] in list_new: #是否在新建列表中
& &continue
& &list_new.append(y[i])
#不在则取进新列表
& & return list_new
my_list = []
for i in xrange(100,1000):
& & for j in
xrange(100,1000):
& x = is_doc(n)
if x != None: #如果不是回文,回返回None,所以这里要用到if语句
& &my_list.append(n)
my_list.sort() #先排个序
my_list = list_once(my_list) #消除重复
print my_list & #打印出来这个列表
print len(my_list) #看看有多少个回文
print max(my_list)#打印最大的那个
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 java回文数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信