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

来源:互联网 发布:合肥机动车选号软件 编辑:程序博客网 时间:2024/05/17 03:28

问题描述:

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

做法思想:

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

优、缺点:

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

下面是具体的实现:

#!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 Falsedef 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 resultdef judge_is_huiwen(new_list):    '''    输入全排序字符串列表输出可以组成的回文串数量    '''    count=0    for one in new_list:        if huiwen(one):            count+=1    return countdef 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


阅读全文
0 0
原创粉丝点击