五站合一网站建设,渭南做网站,泰塔科技网站建设,网页设计制作报价题目描述
给定一个字符串 s s s #xff0c;找出这样一个子串#xff1a;
1#xff09;该子串中的任意一个字符最多出现2次#xff1b;
2#xff09;该子串不包含指定某个字符#xff1b;
请你找出满足该条件的最长子串的长度。
输入描述#xff1a;
第一行为要求…题目描述
给定一个字符串 s s s 找出这样一个子串
1该子串中的任意一个字符最多出现2次
2该子串不包含指定某个字符
请你找出满足该条件的最长子串的长度。
输入描述
第一行为要求不包含的指定字符为单个字符取值范围 [ 0 − 9 a − z A − Z ] [0-9a-zA-Z] [0−9a−zA−Z]
第二行为字符串 s s s每个字符范围 [ 0 − 9 a − z A − Z ] [0-9a-zA-Z] [0−9a−zA−Z]长度范围 [ 1 , 10000 ] [1,10000] [1,10000]
输出描述
一个整数满足条件的最长子串的长度如果不存在满足条件的子串则返回0
测试用例 输入 D abc123 输出 6 输入 D abaca123D 输出 7 题解
使用 left right 指针遍历数组 使用 int[] 记录字符出现次数
源码 Java
public class RightSubStr {static Input input;static {input new Input(D\n abaca123D);}public static void main(String[] args) {char ch input.nextLine().charAt(0);String s input.nextLine();int left 0;int right 0;int[] charcount new int[128];int max 0;boolean flag true;while (right s.length()) {if (ch s.charAt(right)) {charcount new int[128];right;left right;} else {if (flag) {charcount[s.charAt(right)];}if (charcount[s.charAt(right)] 2) {charcount[s.charAt(left)]--;left;flag false;continue;}flag true;right;max Math.max(max, right - left);}}System.out.println(max);}
}