一、前言 字符串(String)是由一系列字符组成的数据类型,用于表示文本。字符可以是字母、数字、符号或其他特殊字符。在编程语言中,字符串通常用引号(单引号或双引号)括起来。 无论是在算法题中,还是在项目开发中,字符串都十分常见。我们经常在字符串中查找某个字符串,如 Java 的 indexOf() 方法。查找方法底层依赖字符串匹配算法,字符串匹配问题也是字符串问题的一个重要分支。 二、什么是字符串匹配 2.1 定义 字符串匹配问题的定义如下: 给定字符串 和字符串 ,其中 也叫主串,字符串 也叫模式串。在字符串 中,找到 的子串与 相等。 我们要在主串中查找模式串,要满足主串长度 大于模式串长度 ,否则就无法匹配。 2.2 分类 一般按照模式串的个数可以将字符串匹配问题分成两类: 单模式串匹配 多模式串匹配 单模式串匹配是指在主串中查找一个模式串的所有出现位置。而多模式串匹配是指在主串中同时查找多个模式串的所有出现位置。 常见的单模式串匹配算法有: BF(Brute Force)算法:暴力匹配算法 RK(Rabin-Karp)算法:基于哈希的字符串匹配算法 K ...
A. Perpendicular Segments 数学 题意 构造两条线段,满足: 端点均在 和 范围内,且为整数; 线段长度大于等于 ; 两线段所在的直线垂直。 题解 观察 ,且保证有解。 越大越难构造出满足条件的两条线段。最坏情况是 ,。此时只有一种构造方法,就是两条对角线。 既然题目保证是有解的,那就按最坏的情况考虑,取 ,然后构造两条对角线即可。 参考代码 12345678910111213141516171819202122232425262728#pragma comment(linker, "/STACK:1024000000,1024000000")#include<bits/stdc++.h>using namespace std;using i64 = long long;using u64 = unsigned long long;using u32 = unsigned;void solve() { int X, Y, K;a cin >> X >> Y >> K; int mn = min(X, ...
A. Sakurako and Kosuke 思维题 题意 初始位置 ,每次可移动 个单位。如果范围超过 ,则无法移动。 题解 观察位置序列 ,因此只需要判断 的奇偶性即可。 参考代码 1234567891011121314151617181920212223242526#pragma comment(linker, "/STACK:1024000000,1024000000")#include<bits/stdc++.h>using namespace std;using i64 = long long;using u64 = unsigned long long;using u32 = unsigned;void solve() { int n; cin >> n; cout << (n % 2 ? "Kosuke" : "Sakurako") << '\n';}int main(int argc, char * argv[]){ ios::sync_with_stdio(false); cin.tie(nullpt ...
写在前面 数学公式的渲染教程可以参考 @yyyz。 下面是我遇到的问题和解决方案。 问题描述 本地调试时渲染正常,行内公式与正文之间的空格被保留。且使用 hexo g 生成的 public 文件中,文章行内公式左右的的空格也能正常显示。 但是服务器上空格却没有正常显示。 解决过程 既然本地显示是正常的,所以考虑应该是 GitHub Actions 的问题。 因为采用的是 后端渲染 的方式,也就是问题出在生成 public 文件的过程中。我们是采用 Github Actions 工作流来部署博客的,因此推测可能是版本不一致的问题。本地 Pandoc 的版本是 3.5,而在工作流中的版本是 2.14。 因此,我尝试在 GitHub Actions 中安装 Pandoc 3。 12- name: Setup pandoc uses: nikeee/setup-pandoc@v1 但是好像还是不行……那就用最蠢的办法,本地跑一遍工作流! 123hexo cleanhexo generategulp 果然空格被吞了,那么真相就只有一个了,就是 gulp! 123456789101112 ...
A. A Gift From Orangutan 贪心 题意 构造一个 数组,记前缀最大值和前缀最小值分别为 和 ,求最大值 。 题解 把最大值和最小值放在最前面,因此答案为 。 参考代码 123456789101112131415161718192021222324252627282930#pragma comment(linker, "/STACK:1024000000,1024000000")#include<bits/stdc++.h>using namespace std;using i64 = long long;void solve() { int n; cin >> n; int mx = 0, mn = 1001; for (int i = 0; i < n; i++) { int x; cin >> x; mx = max(mx, x); mn = min(mn, x); } cout << (n - 1) * (mx - mn) << '\n';}int ...
Q1.构造最小位运算数组Ⅰ 见 Q2。 Q2.构造最小位运算数组Ⅱ 位运算 题意 给定数组 nums,构造一个数组,满足 ans[i] OR (ans[i] + 1) = nums[i] 且 ans[i] 最小。若 ans[i] 不存在则为 。 题解 对于任意的 , 其实就是把 的最后的 变为 ,如 。 要求 最小,最理想的情况是 末尾是一段连续的 ,然后加 和或运算。因此我们需要找出最后一个 的位置即可,方法有很多,可以用循环统计: 12345while((num&1) == 1) { cnt++; num >>= 1;}ans[i] = (((num << cnt)) | (1 << (cnt - 1))) - 1; 也可以不用循环,参考树状数组的 lowbit 函数直接得到最后一个 的位置: 123int temp = ~x;int lb = temp & -temp;ans[i] ^= lb >> 1; 当然还有其他求出最后一个 的方法,这里不再过多赘述,请读者自行探索。 特别的, ...
一、前言 此前,使用国内 CDN 加速了网站的访问速度,但对于国外的访问速度还是比较慢。我的需求是对于境内的访问还是使用国内的 CDN,而对于境外的访问,使用国外的 CDN 分流,并且还能抵御一定的攻击。在网上搜索了一些文章后,发现 Cloudflare 完美适配了我的需求。 二、什么是Cloudflare Cloudflare 是一家网络性能和安全服务的公司,其产品涵盖 CDN、DDos 防护、互联网安全以及 DNS 等多个领域。 官网:Cloudflare Cloudflare 适合跨境独立站的场景,能够有效防住大部分网络攻击。此前,大多数站长以 CNAME 的方式解析到 Cloudflare,但是现在免费版的 Cloudflare 已经不再支持,只能使用 NS 记录的方式。虽然网上有不少教程提供了“逃课”的办法(例如暂时修改为 NS 记录再改回来使用 CNAME),但是还是会被官方检测到。 NS 记录(Name Server Record,名称服务器记录)是 DNS(域名系统)中的一种记录类型,用于指定管理特定域名的 DNS 服务器。NS 记录告诉 DNS 解析器要查询 ...
一、前言 网络优化一直是开发者需要解决的问题。CDN 在近年来十分流行,并且在各大项目中落地,对项目的优化效果十分明显,因此受到广大网站建设者的青睐。什么是 CDN?CDN 解决了什么问题?CDN 又是如何解决这些问题的?今天这篇文章将带大家来一一讲透。 二、什么是CDN CDN(Content Delivery Network)是 内容分发网络,主要用于 加快网页加载速度。 它的原理是通过在全球各地的多个服务器节点来缓存分发内容。当用户请求某个网站或资源时,CDN 会请求重定向到离用户最近的服务节点,从而加快内容的传输速度。在 CDN 技术中,这些节点也有专业名词,叫“边缘节点”,缓存了源站内容的代理服务器。 CDN 有如下优势: 加速内容传递 减轻资源服务器负载 全球覆盖 安全性增强 CDN 的使用场景一般有下面几种: 静态资源的加速 媒体流的加速 网站性能优化 安全防护 三、CDN解决了什么问题 先提个问题:互联网中用户和服务器之间的数据是如何传输的? 从运营商的角度来说,传输主要经历了三个部分,本地网络、骨干网和服务器。 从上图中可以看出,访问速度取决于三个部分: ...
一、前言 在之前的教程中,我们已经完成了博客的多站部署。图片作为博客网站的重要资源,有哪些图床部署方案?今天就来带你熟悉常见的博客图床方案。 二、方案分析 图床方案很多,本质上就是将图片上传到服务器,然后以链接的方式获取图片。一般有三种方式: 自建图床:在服务器上搭建图床,然后使用。可以选择自行购买服务器搭建,或者使用别人搭建好的图床。 云存储:将图片等文件上传到云存储,如腾讯云等,这种方式不仅支持图像处理,并且可以配合 CDN 优化图片加载速度。缺点是付费,存在被刷流量的风险。 全局资源文件:将图片等资源作为全局资源放在博客目录中,一起生成 public 文件,然后以路径的方式加载图片。 这么多种方案,该选择合适的方案呢?我总结了对图床选择的八个维度,如下图所示。 稳定性:即服务的持续性和可靠性,确保图片能够在任何时候都能够正常加载。 可视化界面:提供图片管理页面,方便上传、查看图片等操作。 容量:能够容纳图片的总量以及单个图片的大小限制。 图像处理:支持剪裁、缩放、压缩和水印添加等 API。 配置:管理选项是否灵活,影响上手难度。 成本:主要是存储费用,是否有免费的存储额 ...
一、前言 在上一篇教程中,我们为了解决访问速度的问题将博客部署在了服务器上。最后留下了一个问题,能否将博客部署在 GitHub Pages 和服务器上。你可能想到了修改配置,然后执行 hexo d 命令两次。在这种方式下,我们每次更新博客时,都需要修改配置和输入命令,非常不方便。那么是否有更好的方法呢?本篇教程我就来带你解决这个问题。 二、工作流程 还记得之前的 GitHub Actions 吗?它是博客自动化构建的关键工具,我们之前用它来把博客部署到了 GitHub Pages 上。同样,我们可以编写配置文件,在不修改原来工作流的前提下,新增部署到服务器的任务。整个博客的工作流如下图所示。 在该工作流中,会按顺序执行 GitHub Pages 部署和服务器部署。以本站为例,在部署完成后,可以同时访问 yngcy.github.io 和 yngcy.com 获取博客资源。总结下,基于 GitHub Actions 的工作流优点如下: 多站点部署 只要能保证本地能推送到源码仓库,就可以执行自动化部署流程,无需担心访问站点(服务器)连接 GitHub 失败 一次配置,维护成本低 he ...