第一题
思路:前缀和(map记录之前出现的位置)
public class 第一题10 {
public static void main(String[] args) {
int res = maxLen("abaabcddbc");
System.out.println(res);
}
public static int maxLen(String s) {
int n = s.length();
HashMap<Integer, Integer> map = new HashMap<>();
map.put(0,-1);
int cur = 0;
int ans = 0;
for (int i = 0;i < n;i++){
cur ^= 1 << (s.charAt(i) - 'a');
if (map.containsKey(cur)){
ans = Math.max(ans,i - map.get(cur));
}else {
map.put(cur,i);
}
}
return ans;
}
}
第二题
思路:差分数组
public class 第二题10 {
public static int[] corpFlightBookings(int[][] bookings, int n) {
int[] cnt = new int[n + 2];
for (int i = 0;i < n;i++){
cnt[bookings[i][0]] += bookings[i][2];
cnt[bookings[i][1] + 1] -= bookings[i][2];
}
for (int i = 1;i < cnt.length;i++){
cnt[i] += cnt[i - 1];
}
int[] ans = new int[n];
for (int i = 0;i < n;i++){
ans[i] = cnt[i + 1];
}
return ans;
}
}