求职 # 每日一道面试题 # 如何判断一个字符串是回文字符串,并对你的写出的方法进行测试

Leo · April 25, 2018 · Last by 小本淡淡 replied at May 04, 2018 · 3894 hits

回文字符串概念:如果一个字符串是轴对称,那么它就是一个回文字符串。写出一个方法,判断输入的内容是否是回文字符串,不能使用现成的方法,只能使用基本的语法。
例如:a不是回文字符串,aBa,abba是回文字符串

共收到 19 条回复 时间 点赞
Leo #1 · April 25, 2018 作者

面试时写错了,回去又重新考虑了下,记录一下,平时还是多加练习

def func(str):
if not isinstance(str,basestring):
print "{} 不是字符串类型 ".format(str)
elif len(str)-1<=0:
print "{} is not 回文字符串".format(str)
else:
i=0
j=len(str)-1
while i<j:
if str[i]!=str[j]:
break
i+=1
j-=1
if i<j:
print "{} is not 回文字符串".format(str)
else:
print "{} is 回文字符串".format(str)
python3.6
方法一:切片属于高级特性不算基本语法,但是也列举出来
def is_palindromic(a):
if not isinstance(a,str):
print("{}不是字符串".format(a))
elif a==a[::-1]:
print("{}是回文字符串".format(a))
else:
print("{}不是回文字符串".format(a))

方法二如下:
def is_palindromic(a):
if not isinstance(a,str):
print("{}不是字符串".format(a))
elif len(a) == 1:
print("{}不是回文字符串".format(a))
else:
m = len(a)//2 #python36要用//双地板除
n = len(a)
flag = True
for i in range(m):
if a[i] != a[n-i-1]:
flag = False
break
if flag:
print("{}是回文字符串".format(a))
else:
print("{}不是回文字符串".format(a))
Leo #3 · April 25, 2018 作者
qiangqing2018 回复

大兄弟,请用markdown语法

可以的,大兄弟多谢提醒哈

String str = "aaabaaa";
char []arr = str.toCharArray();
char []arr1 = new char[str.length()];
char []arr2 = new char[str.length()];
for (int i = 0; i <arr.length; i++) {
arr1[i] = arr[i];
}
int j = 0;
for (int i = arr.length-1; i >= 0; i--) {
arr2[j] = arr[i];
j++;
}
for (int i = 0; i < arr2.length; i++) {
if(arr1[i] != arr2[i]){
System.out.println("false");
}
}

@zhuzhu_mx 用了下 toCharArray()可以吗?

这个太简单了啊。你是我们京东的?不好好干活偷偷跑去面试。。

def checker(text):
if not isinstance(text,(str,bytes)):
# raise Exception("输入不是字符串")
return False
if len(text)<2:
return False

half_len = len(text)//2
if text[:half_len]==text[half_len+len(text)%2:][-1::-1]:
return True
else:
return False

if __name__=='__main__':
print(checker('aabb'))
print(checker('aa'))
print(checker('abba'))
print(checker('ababa'))
print(checker('-bab-'))
print(checker('o(_)o'))
print(checker('a'))
print(checker(''))
print(checker(233))

我也不想写成这么骚的操作

def test(str_):
def test_(str_):
if len(str_)==0:return True
h,str_,t=str_[0],str_[1:-1],str_[-1]
return False if h!=t else test_(str_)
return False if len(str_)==1 else test_(str_)

print test('a')
print test('aBa')
print test('abba')
hellohell 回复

import timeit
print timeit.repeat(setup="from __main__ import test",stmt='test("abba")')
Leo #10 · April 26, 2018 作者
hellohell 回复

就喜欢你这种风骚的代码,成功吸引我的注意力

Leo 回复

又改的骚了点 😂

def test(str_):
def test_(str_):
h,str_,t=str_[0],str_[1:-1],str_[-1]
return True if len(str_)==0 else (False if h!=t else test_(str_))
return False if len(str_)==1 else test_(str_)

按照5楼的思路,来了个python版的:

str='aaaabaaaa'
lst=[]
lst.extend(str)
lst1=[]
j=len(lst)
i = 0
while i<j:
lst1.append(lst[i])
i = i + 1
if lst == lst1:
print(str+'是回文字符串')
else:
print(str + '不是回文字符串')
13Floor has been deleted
Author only
15Floor has been deleted

public Boolean isSymmetrical(String str){
if (str==null||str.trim().equals("")){
return false;
}
int length = str.length();
if (length<=1){
return false;
} else {
int index = (int) Math.floor(length / 2.0);
for (int i=0;i<index;i++){
if (str.charAt(i)==str.charAt(length-1-i)){
return true;
}else {
return false;
}
}
}

return false;
}

好难看!!😂

let str = 'aBsBa'

function check(str) {
if (str.length % 2 !== 0)
str = str.slice(0, str.length / 2) + str.slice(str.length / 2 + 1, str.length)

return str.split('').slice(0, str.split('').length / 2).toString() == str.split('').slice(str.split('').length / 2, str.split('').length).reverse().toString()
}

check(str)
hellohell 回复
print(test(""))

确定没有问题么。。。

小本淡淡 回复

他那是py2,py3才用print()

黑山老妖 回复

我指的是空字符串好像会有问题

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up