hihocoder编程练习赛91:相邻字符串
给定一个长度小于1e5的字符串s,s中字符全是大写英语字母。现在要寻找s中有多少组邻近的“hio”字符串,邻近的定义如下:hi距离+io距离+ho距离小于k。输入k和s,求有多少组邻近的hio。
此题关键在于字符串是一维的序列,hi距离+io距离+ho距离必然是偶数,此距离必为hio中最左端字符和最右端字符距离的二倍。
由此,对于任意最左端字符,只需要保证最右端字符和最左端距离不超过k/2即可。使用二分查找解决。
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
int upperBound(List<Integer> a, int x) {
int l = 0, r = a.size();
while (l + 1 < r) {
int mid = (l + r) >> 1;
if (a.get(mid) <= x) {
l = mid;
} else if (a.get(mid) > x) {
r = mid;
}
}
if (r < a.size() && a.get(r) <= x) r++;
return r;
}
int lowerBound(List<Integer> a, int x) {
int l = 0, r = a.size();
while (l + 1 < r) {
int mid = (l + r) >> 1;
if (a.get(mid) < x) {
l = mid;
} else if (a.get(mid) >= x) {
r = mid;
}
}
if (a.get(l) >= x) l--;
return l;
}
long query(List<Integer> a, int beg, int end) {
int b = lowerBound(a, beg), e = upperBound(a, end);
return e - b - 1;
}
Main() {
Scanner cin = new Scanner(System.in);
int k = cin.nextInt();
char[] a = cin.next().trim().toLowerCase().toCharArray();
List<Integer> h = new ArrayList<>(a.length), i = new ArrayList<>(a.length), o = new ArrayList<>(a.length);
List<Integer> hio = new ArrayList<>(a.length);
for (int j = 0; j < a.length; j++) {
if (a[j] == 'h') {
h.add(j);
hio.add(j);
} else if (a[j] == 'i') {
i.add(j);
hio.add(j);
} else if (a[j] == 'o') {
o.add(j);
hio.add(j);
}
}
k /= 2;
long s = 0;
for (int j : hio) {
if (a[j] == 'h') {
s += query(i, j, j + k) * query(o, j, j + k);
} else if (a[j] == 'i') {
s += query(h, j, j + k) * query(o, j, j + k);
} else if (a[j] == 'o') {
s += query(h, j, j + k) * query(i, j, j + k);
}
}
System.out.println(s);
}
public static void main(String[] args) {
new Main();
}
}
hihocoder编程练习赛91:相邻字符串的更多相关文章
- hihocoder编程练习赛52-1 字符串排序
思路: 将字符串按照新的顺序映射之后再排序. 实现: #include <bits/stdc++.h> using namespace std; int main() { int n; s ...
- hihoCoder编程练习赛52
题目1 : 字符串排序 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 一般我们在对字符串排序时,都会按照字典序排序.当字符串只包含小写字母时,相当于按字母表" ...
- hihocoder 编程练习赛23
第一题:H国的身份证号码I 题意:一个N位的正整数(首位不能是0).每位数字都小于等于K,并且任意相邻两位数字的乘积也小于等于K.按从小到大的顺序输出所有合法的N位号码,每个号码占一行. 思路:dfs ...
- hihoCoder编程练习赛72
题目1 : 玩具设计师 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho作为Z国知名玩具品牌AKIRE的首席设计师,对玩具零件的挑剔程度已经到了叹为观止的地步.所有 ...
- hihoCoder编程练习赛69
题目1 : 偶数长度回文子串 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个小写字母字符串,请判断它是否有长度为偶数的非空连续回文子串 输入 输入包含多组数据. ...
- hihocoder编程练习赛75
题目1 : 工作城市分配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 H公司在北京和上海两个城市各有一间办公室.该公司最近新招募了2N名员工,小Hi负责把这2N名员工 ...
- hihoCoder编程练习赛70
题目1 : 数位翻转 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 n,你可以进行若干次操作,每次操作可以翻转 n 的二进制表示下的某一位,即将 0 变成 ...
- hihoCoder编程练习赛67
题目1 : 序列 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个正整数 n, P,求满足以下两个条件的长度为 n 的序列 ai 个数: 1. 1 ≤ ai ≤ ...
- hihoCoder编程练习赛49
题目1 : 相似颜色 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在CSS中我们可以用井号(#)加6位十六进制数表示一种颜色,例如#000000是黑色,#ff0000 ...
随机推荐
- curl 命令模拟 HTTP GET/POST 请求
https://www.cnblogs.com/alfred0311/p/7988648.html
- C# Winform OpenFileDialog 控件
OpenFileDialog控件又称打开文件对话框,主要用来弹出Windows中标准的[打开文件]对话框. OpenFileDialog控件的常用属性如下. (1)Title属性:用来获取或设置对话框 ...
- Python 扩展技术总结(转)
一般来说,所有能被整合或导入到其他Python脚本中的代码,都可以称为扩展.你可以用纯Python来写扩展,也可以用C/C++之类的编译型语言来写扩展,甚至可以用java,C都可以来写 python扩 ...
- 解决html5中video标签无法播放mp4问题的办法
这篇文章主要给大家介绍了关于解决html5中video标签无法播放mp4问题的办法,文中介绍的非常详细,相信会对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧. 最近发现了一个 ...
- 仿win10环境变量助手
相信很多人用过win10后再换回win7或者xp等系统都会有些不习惯,所以在这里安利一款博主自己开发的小软件:环境变量助手. 继承于Win10风格的环境变量,操作简单方便,使用时需要账户权限. 注意: ...
- [Agc005D]K Perm Counting
[Agc005D] K Perm Counting Description 糟糕爷特别喜爱排列.他正在构造一个长度为N的排列.但是他特别讨厌正整数K.因此他认为一个排列很糟糕,当且仅当存在至少一个i( ...
- [USACO4.2]Drainage Ditches
OJ题号:洛谷2740.POJ1273.HDU1532 思路:最大流模板. #include<queue> #include<cstdio> #include<cctyp ...
- If you sleep now,you will have a dream. If you study now,you will achieve your dream.
If you sleep now,you will have a dream. If you study now,you will achieve your dream. 我开始思考,What's m ...
- android TextView如何换行?
具体代码是: rb_zuotian.setText("第一行"+"\n"+"第二行"); rb_jintian.setText(DateUt ...
- angular2项目关于主页结构分析
这里需要弄清楚两个问题: 一:主页模块如何加载进来 angular2的根模块应用加载之后便会根据根模块路由信息来加载主页模块 export const appRoutes=[ { path:'', r ...