首页 > 其他分享 >力扣---面试题 17.05. 字母与数字

力扣---面试题 17.05. 字母与数字

时间:2023-03-11 21:44:53浏览次数:46  
标签:力扣 面试题 前缀 int 字母 --- 数组 array 数字

面试题 17.05. 字母与数字

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

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

示例 1:

输入: ["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"]

示例 2:

输入: ["A","A"]

输出: []

提示:

  • array.length <= 100000
通过次数23,015   提交次数49,755
前缀和,总感觉是对昨天那道题的巩固(虽然昨天那题搞不懂的是那几个公式。。。)
class Solution {
    public String[] findLongestSubarray(String[] array) {
        // 存储前缀和
        int sum = 0;
        // 存储第一个下标
        int res0 = 0;
        // 存储第二个下标
        int res1 = 0;
        // 哈希表,存储出现过的前缀和和其第一次出现时的位置。
        Map<Integer, Integer> map = new HashMap<>();
        // 在刚开始的地方,前缀和一定等于0
        map.put(0, 0);
        for (int i = 0; i < array.length; ++ i) {
            char a = array[i].charAt(0);
            // 数字
            if (a <= '9') {
                sum ++;
                // 字母
            } else {
                sum --;
            }
            // 如果已经出现了相同的前缀和,意味着两者中间的所有前缀和相加等于0,即意味着符合题目要求的数字和字母出现次数相同。
            if (map.containsKey(sum)) {
                // 如果间隔更大,更新答案即可。
                if (res1 - res0 < i - map.get(sum)) {
                    res0 = map.get(sum);
                    res1 = i;
                }
            // i + 1是因为计算的前缀和是包含第i项的,需要保存的是第i+1的位置
            } else {
                map.put(sum, i + 1);
            }
        }
        // 意味着没有进行更新,即不包含符合题意的子数组
        if (res0 == res1) {
            return new String[0];
        }
        String[] ans = new String[res1 + 1 - res0];
        // 复制,由于左闭右开,所以需要进行+1.
        System.arraycopy(array, res0, ans, 0, res1 + 1 - res0);
        return ans;
    }
}

 

 

标签:力扣,面试题,前缀,int,字母,---,数组,array,数字
From: https://www.cnblogs.com/allWu/p/17207058.html

相关文章

  • 03-java下载
    #java版本javase标准版javaME嵌入式。手机,小家电。————没人学javaEE企业级开发![](https://img2023.cnblogs.com/blog/1552841/202303/1552841-202303......
  • 今日报告-20
    今日打卡所花时间(包括上课):3h代码量(行):100发表博客:2篇(不包括本篇)了解到的知识点:今天主要学到的知识是BroadcastReceiver,实现了监听电量变化的广播,还学习了许多种类型的......
  • 泰勒1.3 A - B / C - D前后不能抵消的最低次幂
    当不知道要化到第几项,使得前后不能抵消的最低次幂......
  • 2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛
    https://ac.nowcoder.com/acm/contest/52244A-AXorBProblem给定序列\(a_i\),求有多少数对\((i,j)\)满足\(a_i\oplusa_j=0\),其中\(\oplus\)表示按位异或......
  • flink入门-流处理
    入门需要掌握:从入门demo理解、flink系统架构(看几个关键组件)、安装、使用flink的命令跑jar包+flink的webUI界面的监控、常见错误、调优一、入门demo:统计单词个数0、......
  • 好书的标准--怎样给书打分
    逻辑严谨、结构良好、自成体系;有思想、有深度、有价值、有用途;容易理解吸收;理论联系实际、易于实践。 烂书:逻辑上没有联系,结构上胡拼乱凑,体系上没有基础理论、没有中......
  • 【THM】Google Dorking(利用谷歌搜索发现敏感信息)-学习
    本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/googledorking本文介绍:解释搜索引擎大概是如何工作的并利用谷歌搜索引擎来查找一些隐藏的敏感内容!搜索引......
  • (linux)CentOS -yum 安装jdk1.8
    1、搜索jdk安装:yumsearchjava|grepjdk12、安装jdk1.8:yuminstalljava-1.8.0-openjdk查看是否安装成功:java-version3、环境变量配置:JDK`默认安装路径`/usr/lib/jvm......
  • web自动化测试-元素定位(四)
    对浏览器的控制,通过webdriver对象对网页内容(元素)的控制,通过webElement对象元素定位,实际上就是通过webdriver,获取webElement的过程selenium提供了8个定位策略1.什么是元......
  • Weisfeiler-Lehman Neural Machine for Link Prediction
    目录概符号说明Weisfeiler-Lehmanalgorithm1-WLHash-WLPalette-WL本文的方法代码ZhangM.andChenY.Weisfeiler-Lehmanneuralmachineforlinkprediction.InACM......