大鹏

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

列表

1、回文子串变形1

# str = input()
# n = len(str)
# list = []
# for i in range(0,n-1):
#     for j in range(1,n):
#         if str[j] == str[i] and str[i+1:j] == str[j-1:i:-1]:
#             list.append(len(str[i:j+1]))
# print(max(list))
#
# # ABBA  ->4
# #ABBBA  ->5
# #12HHHHA ->4

############################################

# 从右到左,对每个字符进行遍历处理,并且每个字符要处理两次,因为回文子串有两种情况:
# ABA型:只需要从当前字符向两边扩散,比较左右字符是否相等,找出以当前字符为中心的最长回文子串长度
# ABBA型:只需要从当前字符和下一个字符向两边扩散,比较左右字符是否相等,找出以当前字符和下一个字符为中心的最长回文子串长度
# 最后比对两种类型的长度,取自较长的长度
s = input()
out = 0

for i in range(0, len(s)):  # 双指针
    k = i - 1
    j = i + 1
    len_ABA = 1
    while k >= 0 and j < len(s):
        if s[k] == s[j]:
            k -= 1
            j += 1
            len_ABA += 2
        else:
            break

    k = i
    j = i + 1
    len_ABBA = 0
    while k >= 0 and j < len(s):
        if s[k] == s[j]:
            k -= 1
            j += 1
            len_ABBA += 2
        else:
            break

    now_len = max(len_ABA, len_ABBA)
    if out < now_len:
        out = now_len
print(out)
##############################################
while 1:
    try:
        a=input()
        # 设置初始步长
        bc=0
        # 逆序比较
        if a==a[::-1]:
            print(len(a))
        else:
        # 不断增加步长,比较回文
        #每次增加步长,循环查找有没有比这个步长更长的回文,如果有,继续找,直到找完所有的回文为止
            for i in range(len(a)):
            #     优先查看两个增加两个长度的回文是否存在
                if i-bc>=1 and a[i-bc-1:i+1]==a[i-bc-1:i+1][::-1]:
                    bc+=2
            #     如果增加两个长度的没找到,再查看两个增加一个长度的回文是否存在
                elif  i-bc>=0 and a[i-bc:i+1]==a[i-bc:i+1][::-1]:
                    bc+=1
            print(bc)
    except:
        break

############################################
str_input = input()
if str_input == str_input[::-1]:
    print(len(str_input))
else:
    data_list = []
    for i in range(len(str_input) - 1):
        for j in range(1, len(str_input)):
            if str_input[i] == str_input[j] and str_input[i + 1:j] == str_input[j - 1:i:-1]:
                data_list.append(len(str_input[i:j + 1]))
    print(max(data_list))


###########################################################
str = input()
n = len(str)
list = []
# range和字符串[0:3]取值都是最后一位不取值
for i in range(0, n - 1):
    for j in range(1, n):
        # 首先判定截取字符串的第一个特性,首位位置的字符相同,
        # 第二个特性,从左到右取数和从右到左取数,完全对称
        if str[j] == str[i] and str[i + 1:j] == str[j - 1:i:-1]:
            list.append(len(str[i:j + 1]))

# print(list)
print(max(list))

################################################
def expand(s, i, j):
    while i >= 0 and j < len(s) and s[i] == s[j]:
        i -= 1
        j += 1
    return i + 1, j - 1


while True:
    try:
        s = input()
        max_lens = 0
        for i in range(len(s)):
            l1, r1 = expand(s, i, i)
            l2, r2 = expand(s, i, i + 1)
            if r1 - l1 + 1 > max_lens:
                max_lens = r1 - l1 + 1
            if r2 - l2 + 1 > max_lens:
                max_lens = r2 - l2 + 1
        print(max_lens)
    except:
        break

############################################################
str1 = input()
list1 = []
n = 1
for i in str1[1:-1]:
    a = 1
    b = 0
    c = 1
    d = 0
while True:
    try:
        if str1[n - c] == str1[n + c]: a = a + 2
        c = c + 1
        elif str1[n - d] == str1[n + d + 1]:
        b = b + 2
        d = d + 1

        else:
        list1.append(a)
        list1.append(b)
        n = n + 1
        break
    except:
        list1.append(a)
        list1.append(b)
        break

######################################
import sys


# 对字符串中的每一个字符遍历,首先判断是奇数回文串还是偶数回文串,再向两边拓展,判断并记录回文串的长度

def action(mm):
    maxx = 0
    for i in range(1, len(mm) - 1):
        if mm[i] == mm[i - 1]:
            j = 1
            while i + j <= len(mm) - 1 and i - 1 - j >= 0:
                if mm[i + j] == mm[i - 1 - j]:
                    if maxx < 2 * j + 2:
                        maxx = 2 * j + 2

                    j += 1
                else:

                    break

        if mm[i] == mm[i + 1]:
            j = 1
            while i + 1 + j <= len(mm) - 1 and i - j >= 0:
                if mm[i + 1 + j] == mm[i - j]:
                    if maxx < 2 * j + 2:
                        maxx = 2 * j + 2

                    j += 1
                else:
                    break
        if mm[i] == mm[i + 1] and mm[i] == mm[i - 1]:
            j = 1
            while i + 1 + j <= len(mm) - 1 and i - 1 - j >= 0:
                if mm[i + 1 + j] == mm[i - 1 - j]:
                    if maxx < 2 * j + 3:
                        maxx = 2 * j + 3

                    j += 1

                else:

                    break
        if mm[i] != mm[i + 1] and mm[i] != mm[i - 1]:
            j = 1
            while i + j <= len(mm) - 1 and i - j >= 0:
                if mm[i + j] == mm[i - j]:
                    if maxx < 2 * j + 1:
                        maxx = 2 * j + 1
                    j += 1
                else:
                    break
    print(maxx)


for i in sys.stdin:
    action(i.strip("\n"))
回文子串1
#字符串长度等于1的要单独出来,现在输入一个A报错,输入AA没有问题
str = input()
n = len(str)
list = []
for i in range(0,n-1):
    for j in range(1,n):
        if str[j] == str[i] and str[i+1:j] == str[j-1:i:-1]:
            list.append(len(str[i:j+1]))
print(max(list))

# # ABBA  ->4
# #ABBBA  ->5
# #12HHHHA ->4
切片相等

 

2、列表的连接

n = int(input())
mList = list(map(int, input().split()))
xList = list(map(int, input().split()))
lst = []

# print(mList)
# print(xList)

for i in range(n):
    lst+=[mList[i]]*xList[i] #这里没有想到要用列表的链接
# print(lst) #所有的法码

weights = {0}  #这个重量的组合
for a in lst:
    for b in list(weights):
        weights.add(a+b)
print(len(weights))
# print(weights)
连接

 

posted on 2022-04-28 07:35  pf42280  阅读(11)  评论(0编辑  收藏  举报