1. 题目描述
2. 解题思路
(1) 对于每一个字符ch
,我们维护一个最小的距离值,注意到字符总量的最大值为26;
(2) 维护一个全局次小距离值tmp
,表示正方形内不能包含小于此值的坐标点;
(3) 最后统计所有符合题意的字符坐标点即可。
3. 代码实现
class Solution {
public:
int maxPointsInsideSquare(vector<vector<int>>& points, string s) {
int n = points.size();
// 维护一个所有字符的次小距离
// 对于每一个字符计算其最小距离
// 正方形内不能包含大于等于次小距离的点
vector<int> min_len(26, INT_MAX);
int tmp = INT_MAX;
for (int i = 0; i < n; i++) {
int x = points[i][0], y = points[i][1], ch = s[i] - 'a';
int dis = max(abs(x), abs(y));
if (dis < min_len[ch]) {
// dis是最小的,那么min_len[ch]是次小的,更新最小值与次小值
tmp = min(tmp, min_len[ch]);
min_len[ch] = dis;
}
// 更新次小值
else {
tmp = min(tmp, dis);
}
}
int res = 0;
for (auto dis : min_len) {
// 若是小于次小值,则包含在正方形内部
if (dis < tmp)
res++;
}
return res;
}
};