python求解给定一字符串列表判定每个字符串可以构成的所有序列中回文序列的数目

320 篇文章 88 订阅
151 篇文章 4 订阅

问题描述:

    给定一个待判定的字符串列表,对其中的每个字符串进行判断,计算每个字符所有可能的回文序列数目

做法思想:

    这里采取对单个字符串生成得到其全排列的方式,之后对每个排序字符串进行判断,统计结果输出即可

优、缺点:

    简单易懂易实现,但是消耗内存较多

下面是具体的实现:

#!usr/bin/env python
#encoding:utf-8

'''
__Author__:沂水寒城
功能:给定一个字符串求解所有可能的回文序列
'''

def huiwen(one_str):
    '''
    输入字符串,判断是否是回文序列,返回布尔值
    '''
    length=len(one_str)
    if length%2==0:
        half=length/2
        first_str=one_str[:half]
        second_str=''.join(list(one_str[half:])[::-1])
        if first_str==second_str:
            return True 
        else:
            return False
    else:
        half=(length+1)/2
        first_str=one_str[:half-1]
        second_str=''.join(list(one_str[half:])[::-1])
        if first_str==second_str:
            return True 
        else:
            return False


def all_sorts(str_list):
    '''
    输入字符串列表,输出全排序列表
    '''
    if len(str_list) == 0 or len(str_list) == 1:
        return [str_list]   
    result = []
    for i in str_list:
        temp_list = str_list[:] #复制
        temp_list.remove(i)
        temp = all_sorts(temp_list) #使用递归 生成删掉一个元素的xs的全排列
        for one in temp:   #对temp中的每一项再进行遍历
            one[0:0] = [i]   #在index 0 的位置插入之前删去的i
            result.append(one)
    return result


def judge_is_huiwen(new_list):
    '''
    输入全排序字符串列表输出可以组成的回文串数量
    '''
    count=0
    for one in new_list:
        if huiwen(one):
            count+=1
    return count


def main_func(one_str_list):
    '''
    主调用函数,输入为一个待判定字符串列表,输出可以构成的回文序列数目
    '''
    for one_str in one_str_list:
        one_list=list(one_str)
        one_result_list=all_sorts(one_list)
        one_new_list=[''.join(one) for one in one_result_list]
        print '该字符串所有可能构成的回文序列数目为:', judge_is_huiwen(one_new_list)

if __name__=='__main__':
    # 单个测试样例
    # one_str='12345'
    # one_list=list(one_str)
    # result_list=all_sorts(one_list)
    # new_list=[''.join(one) for one in result_list]
    # print '该字符串所有可能构成的回文序列数目为:', judge_is_huiwen(new_list)
    one_str_list=['aaabb','abcdef','aaa','adc']
    main_func(one_str_list)

结果如下:


该字符串所有可能构成的回文序列数目为: 24
该字符串所有可能构成的回文序列数目为: 0
该字符串所有可能构成的回文序列数目为: 6
该字符串所有可能构成的回文序列数目为: 0


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Together_CZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值