免费网站注册免费创建网站,化妆品营销型网站模板,wordpress 快速安装失败,课题组研究网站怎么做文章目录 题目描述输入描述输出描述示例1示例2示例3思路代码 题目描述
给你一个字符串 s#xff0c;字符串 s 首尾相连成一个环形#xff0c;请你在环中找出 ‘l’、‘o’、‘x’ 字符都恰好出现了偶数次最长子字符串的长度。
输入描述
输入是一串小写的字母组成的字符串 … 文章目录 题目描述输入描述输出描述示例1示例2示例3思路代码 题目描述
给你一个字符串 s字符串 s 首尾相连成一个环形请你在环中找出 ‘l’、‘o’、‘x’ 字符都恰好出现了偶数次最长子字符串的长度。
输入描述
输入是一串小写的字母组成的字符串
输出描述
输出是一个整数
1 ≤ s.length ≤ 5 * 10^5
s只包含小写英文字母
示例1 输入 alolobo 输出 6 示例2 输入 looxdolx 输出 7 示例3 输入 bcbcbc 输出 6 思路
破环 拼接字符串偶数判断 状态标记三位二进制分别记录LOX的出现次数 1代表奇数次 0代表偶数次例如001代表l偶数次o偶数次x奇数次; 状态计算 “laaall” 索引为0时,状态100 索引为5是状态也是1005-05:相当于索引0-5的子串多一个l子串字符串0-0的时候正好也多一个l相减正好都是偶数不多不少。 代码
public class Demo13 {public static void main(String[] args) {Scanner in new Scanner(System.in);String s in.nextLine();String ss s s;int max 0;for (int i 0; i s.length(); i) {String substring ss.substring(i, i s.length());max Math.max(findLOXFromString(substring), max);}System.out.println(max);in.close();}public static int findLOXFromString(String s) {int res 0;// key转态字符出现位置二进制000 每一位代表字符出现的LOX是奇数还是偶数。奇数为1 偶数为0// value 第一次出现的位置MapByte, Integer statusPos new HashMap();statusPos.put((byte) 0, -1);Byte status 0;for (int i 0; i s.length(); i) {char c s.charAt(i);switch (c) {case l:status (byte) (status ^ Byte.valueOf(001, 2));break;case o:status (byte) (status ^ Byte.valueOf(010, 2));break;case x:status (byte) (status ^ Byte.valueOf(100, 2));break;}Integer sp statusPos.getOrDefault(status, null);if (sp null) {statusPos.put(status, i);} else {res Math.max(res, i - sp);}}return res;}}