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

Leo · 2018年04月25日 · 最后由 小本淡淡 回复于 2018年05月04日 · 4105 次阅读

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

共收到 19 条回复 时间 点赞
Leo #1 · 2018年04月25日 Author

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

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 · 2018年04月25日 Author
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 · 2018年04月26日 Author
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 + '不是回文字符串')
13楼 已删除
仅楼主可见
15楼 已删除

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()

黑山老妖 回复

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册