​力扣解法汇总面试题 17.05. 字母与数字
创始人
2025-05-29 00:03:03

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

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

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

示例 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

解题思路:

* 解题思路:
* 记录每个位置charNum-intNum的值,按照这个值来分组,满足统一条件的两个位置相减,就是符合条件的子数组。
* 构建一个Map>的结构,某个位置charNum-intNum的结果,value为满足这个结果的所有位置的集合。
* 这里要特别注意一下diff=0的情况,0的话时候额外填充一个0。
* 然后遍历map的value,取出集合,集合的最后一位减去第一位,就是满足条件的长度。求最长。

代码:

public class MianShi1705 {public String[] findLongestSubarray(String[] array) {Map> map = new HashMap<>();int intNum = 0;int charNum = 0;for (int i = 0; i < array.length; i++) {String s = array[i];char c = s.toCharArray()[0];if ((c >= 'A' && c <= 'Z') || c >= 'a' && c <= 'z') {charNum++;} else {intNum++;}int diff = charNum - intNum;List integers = obtainQueue(map, diff);if (diff == 0 && integers.size() == 0) {integers.add(0);}integers.add(i + 1);}int maxLength = 0;int maxStart = 0;int maxEnd = 0;for (int key : map.keySet()) {List list = map.get(key);if (list.size() == 0) {continue;}int length;if (list.size() == 1) {continue;}length = list.get(list.size() - 1) - list.get(0);if (length > maxLength || (length == maxLength && list.get(0) < maxStart)) {maxLength = length;maxStart = list.get(0);maxEnd = list.get(list.size() - 1);}}if (maxLength == 0) {return new String[0];}String[] strings = Arrays.copyOfRange(array, maxStart, maxEnd);return strings;}private List obtainQueue(Map> map, int key) {List integers = map.get(key);if (integers == null) {integers = new ArrayList<>();map.put(key, integers);}return integers;}}

相关内容

热门资讯

重磅.来袭“全民牛牛究竟是有挂... 您好:全民牛牛这款游戏可以开挂,确实是有挂的,需要软件加微信【8487422】很多玩家在这款游戏中打...
最新消息“天天河北麻将到底是不... 您好:天天河北麻将这款游戏可以开挂,确实是有挂的,需要软件加微信【8487422】很多玩家在这款游戏...
我来分享.土豪赢三张.真的有挂... 亲.土豪赢三张这款游戏是可以开挂的,确实是有挂的,通过添加客服【9307068】很多玩家在这款游戏中...
玩家必看“七彩丹霞到底有挂吗”... 亲.七彩丹霞这款游戏是可以开挂的,确实是有挂的,通过添加客服【4830828】很多玩家在这款游戏中怀...
&lt;今日了解>... 亲.胜奕填大坑这款游戏是可以开挂的,确实是有挂的,通过添加客服【9503776】很多玩家在这款游戏中...