使用图例 代码项目地址 直接上链接Github[https://github.com/NotoChen/JavaVersionChoice] 脚本内容 拓展 下载安装其他厂商...
使用图例 代码项目地址 直接上链接Github[https://github.com/NotoChen/JavaVersionChoice] 脚本内容 拓展 下载安装其他厂商...
import java.util.regex.*;
class Solution {
public int countAsterisks(String s) {
Pattern pattern = Pattern.compile("\\|.*?\\|"); // 正则表达式匹配 |...| 之间的内容
Matcher matcher = pattern.matcher(s);
int res = 0;
while (matcher.find()) {
String match = matcher.group(); // 获取匹配的字符串
res += countAsterisksInSegment(match); // 统计每个匹配段中的星号数目
}
return res;
}
private int countAsterisksInSegment(String segment) {
int count = 0;
for (char c : segment.toCharArray()) {
if (c == '*') {
count++;
}
}
return count;
}
}
【算法题】2315. 统计星号题目: 给你一个字符串 s ,每 两个 连续竖线 '|' 为 一对 。换言之,第一个和第二个 '|' 为一对,第三个和第四个 '|' 为一对,以此类推。 请你返回 不在 竖线...
class Solution {
public int balancedString(String s) {
int n = s.length();
int target = n / 4;
int[] count = new int[4]; // 记录每种字符的出现次数
int result = n; // 初始化结果为整个字符串长度
int left = 0;
// 统计每种字符的出现次数
for (char c : s.toCharArray()) {
if (c == 'Q') {
count[0]++;
} else if (c == 'W') {
count[1]++;
} else if (c == 'E') {
count[2]++;
} else if (c == 'R') {
count[3]++;
}
}
// 如果每种字符的出现次数都是n的1/4,说明已经是平衡字符串,直接返回0
if (count[0] == target && count[1] == target && count[2] == target && count[3] == target) {
return 0;
}
for (int right = 0; right < n; right++) {
// 缩小窗口,更新右指针所对应的字符的出现次数
char rc = s.charAt(right);
count[rc == 'Q' ? 0 : (rc == 'W' ? 1 : (rc == 'E' ? 2 : 3))]--;
// 当窗口中的字符出现次数都小于等于n的1/4时,左指针右移,扩大窗口
while (left <= right && count[0] <= target && count[1] <= target && count[2] <= target && count[3] <= target) {
result = Math.min(result, right - left + 1);
char lc = s.charAt(left);
count[lc == 'Q' ? 0 : (lc == 'W' ? 1 : (lc == 'E' ? 2 : 3))]++;
left++;
}
}
return result;
}
}
LeetCode #1234 Replace the Substring for Balanced String 替换子串得到平衡字符串1234 Replace the Substring for Balanced String 替换子串得到平衡字符串 Description: You are given a...
#include <vector>
int countNegatives(std::vector<std::vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
int count = 0;
for (int i = 0; i < m; i++) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (grid[i][mid] < 0) {
right = mid - 1;
} else {
left = mid + 1;
}
}
count += (n - left);
}
return count;
}
双指针法
这种方法在每一行的负数个数上效率更高。
1351. 统计有序矩阵中的负数1.题目 给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非递增顺序排列。 请你统计并返回 grid 中 负数 的数目。 示例 1:输入:grid...
PageHelper 一. 开发准备 原创标识[https://blog.csdn.net/NOT_TWO_CHEN] 1. 开发工具 IntelliJ IDEA 2020....