当前位置:网站首页>面试题 17.05. 字母与数字
面试题 17.05. 字母与数字
2022-08-08 14:26:00 【秀强】
面试题 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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-longest-subarray-lcci
解法1
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/** * 思路: * 数字看成-1,字母看成1,再计算前缀和。 * 哈希表记录第一次出现前缀和的下标。 * 前缀和相同则计算下标的差值。 */
public class Solution {
public String[] findLongestSubarray(String[] array) {
// 前缀和
int s = 0;
// 保存第一次
Map<Integer, Integer> m = new HashMap<>();
// 前缀和数组,保存该前缀和第一次出现时,数组的下标
int[] sum = new int[array.length];
// 最长的字母和数字个数相同的子数组的长度
int max = 0;
// 子数组起始下标
int start = 0;
// 题目中只要求数字和字母个数相同,跟数字和字母具体是多少没关系。所以将数字看成 -1,字母看成 1,类似于线段树中离散化的思想。
for (int i = 0; i < array.length; i++) {
char c = array[i].charAt(0);
if (c >= '0' && c <= '9') {
// 数字 -1
s--;
} else {
// 字母 + 1
s++;
}
// 前缀和等于0的情况,[0,i] 区间内所有元素的和为 0,即数字和字母个数相同。区间长度为 i+1
if (s == 0 && i + 1 > max) {
start = 0;
max = i + 1;
}
// 填充前缀和数组
sum[i] = s;
// 该前缀和第一次出现时的下标
Integer prefixFist = m.get(s);
if (prefixFist != null) {
// 当前下标 i 减去第一次出现该前缀和的下标 prefixFist,计算出区间长度
if (i - prefixFist > max) {
// 举个例子 前缀和为 1 0 1,下标分别为 0 1 2,第一次出现前缀和为 1 的下标为 0,第二次出现前缀和的下标为 2。区间 0 1 的长度为 2 - 0 = 2
start = prefixFist + 1;
max = i - prefixFist;
}
} else {
m.put(s, i);
}
}
// 返回最长子数组
String[] copy = new String[max];
System.arraycopy(array, start, copy, 0, max);
return copy;
}
}
作者:xiu-qiang-jiang
链接:https://leetcode.cn/problems/find-longest-subarray-lcci/solution/by-xiu-qiang-jiang-g8j9/
来源:力扣(LeetCode)
边栏推荐
- 一万块钱能做一手尿素期货吗?尿素期货怎么做才安全?
- 【Rust—LeetCode题解】1408.数组中的字符串匹配
- Time to update your tech arsenal in 2020: Asgi vs Wsgi (FastAPI vs Flask)
- Make mistakes small yards artisan study room 】 【 the ladder of the progress of children
- 华为云会议初体验【华为云至简致远】
- OpenInfra Days China 2022 |StreamNative 翟佳、刘德志受邀分享
- P8352-[SDOI/SXOI2022]小N的独立集【dp套dp】
- 基于QWebassembly的一个数据库监测工具
- 非科班毕业生,五面阿里:四轮技术面+HR一面已拿offer
- 【Personal Summary】2022.8.7 Week End
猜你喜欢
随机推荐
UOJ#748-[UNR #6]机器人表演【dp】
【小码匠自习室】ABC180-C: 马虎是小孩的天性吗?
shell正则表达式,三剑客grep命令
pip install xxx 出现 AttributeError: ‘tuple’ object has no attribute ‘read’ 错误
【小码匠自习室】ABC084 - D:喜欢这样的大神,超有才华
基于接口而非实现编程
基于QWebassembly的一个数据库监测工具
【小码匠自习室】CSP-J/S复试高分秘诀经验分享
PC端实用软件推荐
京东三面惨遭被虐,关于redis,高并发,分布式,问懵了
【小码匠自习室】[NOI Online 2020-3 入门组] 最急救助:被“幸运女神”眷顾的人
更改C盘用户目录下的用户名(亲测有效)
【控制】动力学建模举例 --> 拉格朗日法
开源一夏 | 自己画一块ESP32-C3 的开发板(PCB到手)
P8352-[SDOI/SXOI2022]小N的独立集【dp套dp】
什么是发饰hair accessories?
非科班毕业生,五面阿里:四轮技术面+HR一面已拿offer
【小码匠自习室】朋友的朋友不是朋友
[Redis] Bitmap and usage scenarios of bitmap (statistics of online people and user online status)
看三年的CRUD程序员如何解决数据库死锁的