滑动窗口+负债表
2022-05-12:小歪每次会给你两个字符串:
笔记s1和关键词s2,请你写一个函数,
判断s2的排列之一是否是s1的子串。
如果是,返回true;
否则,返回false。
来自字节飞书团队
代码(java):
点击查看代码
int b=0;
b-- ==0 //先进行判断,后进行减法操作,这是一个知识误区。
public boolean stringCheckPlus(String s1,String s2){
//简单判断
if (s1.length()<s2.length()) return false;
//s2变成数组
char[] str2 = s2.toCharArray();
//新建负债表
int[] count = new int[256];
//循环放入s2的值
for (int i=0;i<str2.length;i++) count[str2[i]]++;
//记录s2的大小
int M = str2.length;
//s1变成数组
char[] st1 = s1.toCharArray();
//记录s1中的失效元素
int inValidTimes =0;
//记录起点
int R=0;
for (;R<M;R++){
//判断是否是失效元素
if (count[st1[R]]--<=0){
//失效元素加一
inValidTimes++;
}
}
//遍历剩下的元素
for (;R< st1.length;R++){
//判断失效元素个数
if (inValidTimes ==0){
return true;
}
//判断接下来的s1元素是否是失效元素
if (count[st1[R]]--<=0){
inValidTimes++;
}
//判断s1开头排出去的元素是否是失效元素,并进行归还元素值。
if (count[st1[R-M]]++ <0){
inValidTimes--;
}
}
//判断失效元素是否和0相等
return inValidTimes ==0;
}

浙公网安备 33010602011771号