栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

面试题 17.05. 字母与数字

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

面试题 17.05. 字母与数字

题目

给定一个放有字母和数字的数组,找到最长的子数组,且包含的字母和数字的个数相同。

返回该子数组,若存在多个最长子数组,返回左端点下标值最小的子数组。若不存在这样的数组,返回一个空数组。

示例:

输入: ["A","1","B","C","D","2","3","4","E","5","F","G","6","7","H","I","J","K","L","M"]

输出: ["A","1","B","C","D","2","3","4","E","5","F","G","6","7"]

分析: 首先前k个数组长度的数字字母个数差值,k∈[0, n], 如果出现差值为0,则表明区间[0, k]数字字母数相同,如果出现不同位差值相同的情况,比如第 k 1 k_1 k1​位和 k 2 k_2 k2​位相同,则说明区间 ( k 1 , k 2 ] (k_1, k_2] (k1​,k2​]的数字字母数相同,创建一个字典,key是差值,value记录区间的起始点,当遇到相同差值时,变可以求出区间长度,保留长度最大的即可

class Solution:
    def findLongestSubarray(self, array: List[str]) -> List[str]:
        max_length = 0
        sub_array = []
        count_array = [0]*len(array)
        count_array[-1] = 0
        count_dict = {}
        count_dict[0] = -1 #数字字母数差值为0,说明起始点在第一位
        for i in range(len(array)):
            if array[i].isdigit():  
                count_array[i] = count_array[i-1] + 1
            else:
                count_array[i] = count_array[i-1] - 1

            if count_array[i] not in count_dict:
                count_dict[count_array[i]] = i
            else:
                left = count_dict[count_array[i]]
                length = i - left
                if length > max_length:
                    max_length = length
                    sub_array = array[left+1:i+1]
        return sub_array
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/272956.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号