华为OD刷题C卷 - 每日刷题 17(字符串序列判定,最长的指定瑕疵度的元音子串)

1、(字符串序列判定):

这段代码是解决“字符串序列判定”的问题。它提供了一个Java类Main,其中包含main方法和getResult方法,用于判断字符串S是否是字符串L的有效子串。

main方法首先读取两个字符串SL,然后调用getResult方法并打印最后一个有效字符在L中的位置。

getResult方法使用双指针技术,初始化两个指针ij分别遍历字符串SL。如果两个指针所指向的字符相同,则两个指针都向前移动;如果不同,则只有j指针向前移动。这样,ans变量记录了S中最后一个字符在L中的索引位置。如果S中的所有字符在L中都未找到,则返回-1

2、(最长的指定瑕疵度的元音子串):

这段代码是解决“最长的指定瑕疵度的元音子串”的问题。它提供了一个Java类Main,其中包含main方法和getMaxVowel方法,以及一个辅助方法getFlaw,用于找出给定字符串中最长的、具有指定瑕疵度的元音子串。

main方法首先读取预期的瑕疵度flaw和字符串str,然后调用getMaxVowel方法并打印最长元音子串的长度。

getMaxVowel方法使用双指针技术,通过两层循环遍历字符串str的所有可能子串。使用正则表达式Pattern来检查子串是否为元音字符串,即开头和结尾都是元音字母。同时,使用getFlaw方法来计算子串的瑕疵度。如果找到满足条件的子串,则返回其长度;如果没有找到,则返回0

getFlaw方法通过替换掉所有元音字母,计算剩余非元音字母的长度,即为瑕疵度。

3、(最长的指定瑕疵度的元音子串 - 优化版):

这段代码是第二段代码的优化版本,它提供了一个Java类Simple,其中包含main方法和getMaxVowel方法,用于更高效地找出给定字符串中最长的、具有指定瑕疵度的元音子串。

main方法的实现与第二段代码相同。

getMaxVowel方法首先将所有元音字母存储在一个HashSet中,然后遍历字符串str,记录所有元音字母的索引。接着,使用双指针技术,通过维护一个滑动窗口来找出满足瑕疵度条件的最长元音子串。与第二段代码相比,这种方法减少了不必要的子串检查,提高了效率。

package OD258;import java.util.Scanner;/*** @description 字符串序列判定* @level 6* @score 100*//*** 题目描述* 输入两个字符串S和L,都只包含英文小写字母。S长度<=100,L长度<=500,000。* <p>* 判定S是否是L的有效子串。* <p>* 判定规则:* <p>* S中的每个字符在L中都能找到(可以不连续),且S在L中字符的前后顺序与S中顺序要保持一致。* <p>* (例如,S=”ace”是L=”abcde”的一个子序列且有效字符是a、c、e,而”aec”不是有效子序列,且有效字符只有a、e)* <p>* 输入描述* 输入两个字符串S和L,都只包含英文小写字母。S长度<=100,L长度<=500,000。* <p>* 先输入S,再输入L,每个字符串占一行。* <p>* 输出描述* S串最后一个有效字符在L中的位置。(首位从0开始计算,无有效字符返回-1)*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//字符串sString s = sc.nextLine();//字符串lString l = sc.nextLine();System.out.println(getResult(s, l));}//返回字符串s最后一个有效字符在字符串l中的下标public static int getResult(String s, String l) {char[] ss = s.toCharArray();char[] ls = l.toCharArray();//双指针int ans = -1;int i = 0;int j = 0;while (i < ss.length && j < ls.length) {//如果相同,则i++ j++if (ss[i] == ls[j]) {ans = j;i++;j++;} else {j++;}}return ans;}}
package OD265;import java.util.Scanner;
import java.util.regex.Pattern;/*** @description 最长的指定瑕疵度的元音子串* @level 6* @score 100*//*** 题目描述* 开头和结尾都是元音字母(aeiouAEIOU)的字符串为元音字符串,其中混杂的非元音字母数量为其瑕疵度。比如:* <p>* “a” 、 “aa”是元音字符串,其瑕疵度都为0* “aiur”不是元音字符串(结尾不是元音字符)* “abira”是元音字符串,其瑕疵度为2* 给定一个字符串,请找出指定瑕疵度的最长元音字符子串,并输出其长度,如果找不到满足条件的元音字符子串,输出0。* <p>* 子串:字符串中任意个连续的字符组成的子序列称为该字符串的子串。* <p>* 输入描述* 首行输入是一个整数,表示预期的瑕疵度flaw,取值范围[0, 65535]。* <p>* 接下来一行是一个仅由字符a-z和A-Z组成的字符串,字符串长度(0, 65535]。* <p>* 输出描述* 输出为一个整数,代表满足条件的元音字符子串的长度。*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//预期瑕疵度int n = Integer.parseInt(sc.nextLine());//字符串String str = sc.nextLine();System.out.println(getMaxVowel(str, n));}//寻找一个字符串中满足预期瑕疵度的最长元音子串,返回最长元音子串的长度public static int getMaxVowel(String s, int flaw) {//如果长度为1if (s.length() == 1) {if (s.charAt(0) == 'a' || s.charAt(0) == 'e' || s.charAt(0) == 'i' || s.charAt(0) == 'o' || s.charAt(0) == 'u' && getFlaw(s) == flaw) {return 1;} else {return 0;}}//双指针Pattern p = Pattern.compile("^[AEIOUaeiou].*[AEIOUaeiou]$");for (int i = 0; i < s.length(); i++) {for (int j = s.length(); j > i; j--) {String temp = s.substring(i, j);//一找到就返回,一定是最大长度if (p.matcher(temp).find() && getFlaw(temp) == flaw) {return temp.length();}}}//没找到的话return 0;}//返回一个元音字符串中的瑕疵度public static long getFlaw(String s) {//开头和末尾一定是元音String newStr = s.replaceAll("[AEIOUaeiou]", "");return newStr.length();}
}
package OD265;import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
import java.util.regex.Pattern;/*** @description 最长的指定瑕疵度的元音子串* @level 6* @score 100*//*** 题目描述* 开头和结尾都是元音字母(aeiouAEIOU)的字符串为元音字符串,其中混杂的非元音字母数量为其瑕疵度。比如:* <p>* “a” 、 “aa”是元音字符串,其瑕疵度都为0* “aiur”不是元音字符串(结尾不是元音字符)* “abira”是元音字符串,其瑕疵度为2* 给定一个字符串,请找出指定瑕疵度的最长元音字符子串,并输出其长度,如果找不到满足条件的元音字符子串,输出0。* <p>* 子串:字符串中任意个连续的字符组成的子序列称为该字符串的子串。* <p>* 输入描述* 首行输入是一个整数,表示预期的瑕疵度flaw,取值范围[0, 65535]。* <p>* 接下来一行是一个仅由字符a-z和A-Z组成的字符串,字符串长度(0, 65535]。* <p>* 输出描述* 输出为一个整数,代表满足条件的元音字符子串的长度。*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Simple {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//预期瑕疵度long n = Integer.parseInt(sc.nextLine());//字符串String str = sc.nextLine();System.out.println(getMaxVowel(str, n));}//寻找一个字符串中满足预期瑕疵度的最长元音子串,返回最长元音子串的长度public static long getMaxVowel(String s, long flaw) {//所有元音字母char[] vowels = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};//添加到set中Set<Character> vowelSet = new HashSet<>();for (char c : vowels) {vowelSet.add(c);}//存放字符串s中元音字符的下标ArrayList<Integer> vowelIndex = new ArrayList<>();for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);//如果set中含有c,则记录该元音字母的下标if (vowelSet.contains(c)) {vowelIndex.add(i);}}//保存瑕疵度相同的最长元音子串长度int maxLen = 0;int n = vowelIndex.size();//双指针int left = 0;int right = 0;while (right < n) {//瑕疵度 后一个元音字母在s中的下标-前一个元音字母在s中的下标 - left与right中间的元音字母数量int diff = vowelIndex.get(right) - vowelIndex.get(left) - (right - left);//判断瑕疵度if (diff < flaw) {right++;} else if (diff > flaw) {left++;} else {//与预期瑕疵度相等maxLen = Math.max(maxLen, vowelIndex.get(right) - vowelIndex.get(left) + 1);//right++有可能瑕疵度也相等,但长度+1right++;}}return maxLen;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/849796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式锁与信号量详解

一、引言 在分布式系统中&#xff0c;数据的一致性和并发控制是两大核心挑战。分布式锁和信号量作为解决这些问题的关键工具&#xff0c;被广泛应用于各种分布式场景中。本文将对分布式锁和信号量的概念、原理、实现方式以及应用场景进行详细介绍&#xff0c;并通过具体的代码…

STM32项目分享:智能家居安防系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板及元器件图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.c…

Decimal要从str转换以避免精度问题

最近遇到一个python的小数的问题&#xff0c;本来应该很简单的小于判断&#xff0c;无论如何都不正确&#xff0c;而且浮点小数都没问题&#xff0c;但decimal小数有问题&#xff0c;给我整蒙了&#xff0c;后来才发现是对decimal不了解所致&#xff0c;如果你还用float转decim…

翻转二叉树-力扣

翻转二叉树&#xff0c;通过前序遍历的顺序&#xff0c;从根节点开始&#xff0c;将节点的左右子节点一次进行交换即可。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), …

Flowable项目启动报错#java.time.LocalDateTime cannot be cast to java.lang.String

Flowable 项目启动后报错 flow项目第一次启动创建表成功&#xff0c;但是第二次启动时报错信息如下&#xff1a; 1、Error creating bean with name ‘appRepositoryServiceBean’ defined in class 2、Error creating bean with name ‘flowableAppEngine’: FactoryBean t…

立创小tips

立创小tips 原理图中 1-修改图纸属性 保存完&#xff0c;绘制原理图的界面就出现了&#xff0c;然后我们鼠标点击原理图的边缘变成红色就可以高边表格的属性了。 2-鼠标右键可以移动整个原理图 3-查看封装 点击任意一个元器件&#xff0c;在右侧就会显示封装属性&#xff…

基于fabric封装一个简单的图片编辑器(vue 篇)

介绍 前言vue demo版本react 版本 前言 对 fabric.js 进行二次封装&#xff0c;实现图片编辑器的核心功能。核心代码 不依赖 ui响应式框架vue ,react 都适用。 只写了核心编辑相关代码便于大家后续白嫖二次开发 核心代码我就没有打包发布 会 和 业务代码一起放到项目中。 vu…

socket通信(C语言+Python)

在socket文件夹下创建server.c和client.c。 服务端代码&#xff08;server.c&#xff09;&#xff1a; #include <stdio.h> #include <Winsock2.h> void main() {WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested MAKEWORD( 1, 1 );err WSAS…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于日间-日内不确定集的中长期电源扩展规划》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

简说SQLServer

SQLServer是Microsoft公司推出的一种关系型数据库系统&#xff0c;下面将对其进行详细的解析&#xff0c;包括其主要特性、功能、版本介绍等方面&#xff1a; 一、主要特性 高性能设计&#xff1a;SQLServer充分利用WindowsNT的优势&#xff0c;提供高性能的数据库操作。系统…

SpringBoot整合RabbitMQ (持续更新中)

RabbitMQ 官网地址&#xff1a;RabbitMQ: One broker to queue them all | RabbitMQ RabbitMQ 与 Erlang 版本兼容关系​ 3.13.0 26.0 26.2.x The 3.13 release series is compatible with Erlang 26. OpenSSL 3 support in Erlang is considered to be mature and ready for…

kafka-重试和死信主题(SpringBoot整合Kafka)

文章目录 1、重试和死信主题2、死信队列3、代码演示3.1、appication.yml3.2、引入spring-kafka依赖3.3、创建SpringBoot启动类3.4、创建生产者发送消息3.5、创建消费者消费消息 1、重试和死信主题 kafka默认支持重试和死信主题 重试主题&#xff1a;当消费者消费消息异常时&…

数据结构(C语言)之对归并排序的介绍与理解

目录 一归并排序介绍&#xff1a; 二归并排序递归版本&#xff1a; 2.1递归思路&#xff1a; 2.2递归代码实现&#xff1a; 三归并排序非递归版本&#xff1a; 3.1非递归思路&#xff1a; 3.2非递归代码实现&#xff1a; 四归并排序性能分析&#xff1a; 欢迎大佬&#…

【CS.AI】GPT-4o:重新定义人工智能的新标杆

文章目录 1 序言2 GPT-4o的技术亮点3 GPT-4o与前代版本的对比3.1 热门AI模型对比表格GPT-3.5GPT-4GPT-4oBERTT5 3.2 其他 4 个人体验与感受5 结论 1 序言 嘿&#xff0c;大家好&#xff01;今天要聊聊一个超级酷的AI新突破——GPT-4o&#xff01;最近&#xff0c;OpenAI发布了…

libgdx ashley框架的讲解

官网&#xff1a;https://github.com/libgdx/ashley 我的libgdx学习代码&#xff1a;nanshaws/LibgdxTutorial: libgdx 教程项目 本项目旨在提供完整的libgdx桌面教程&#xff0c;帮助开发者快速掌握libgdx游戏开发框架的使用。成功的将gdx-ai和ashley的tests从官网剥离出来,并…

基于SpringBoot和Vue开发的功能强大的图书馆系统(附源码)

基于SpringBoot和Vue开发的功能强大的图书馆系统(附源码) 功能介绍 图书馆系统功能包括: 1、读者端: 智能推荐图书读者在线预约座位读者借阅归还图书图书详情图书评论、评星用户登录、注册、修改个人信息用户自定义图书标签用户报名活动参加活动书架展示和添加删除用户邮…

window.setInterval(func,interval)定时器

window.setInterval()是JavaScript中的方法&#xff0c;用于在指定的时间间隔重复执行某个函数或代码块。它接受两个参数&#xff0c;第一个参数是要执行的函数或代码块&#xff0c;第二个参数是时间间隔&#xff08;以毫秒为单位&#xff09;。 以下是使用window.setInterval…

oracle10g的dataguard测试

sohu老博客的看不了了&#xff0c;只能重新发布记录&#xff1a; windows2003serveroracle10.2.0.1 1.检查归档模式 SQL> archive log list; 数据库日志模式 存档模式 自动存档 启用 存档终点 USE_DB_RECOVERY_FILE_DEST 最早的联机日…

如何在另一台电脑上使用相同的Python环境和依赖包

如果您想在另一台电脑上使用相同的Python环境和依赖包&#xff0c;有几种方法可以实现&#xff1a; 使用requirements.txt&#xff1a; 在您当前的虚拟环境中&#xff0c;您可以使用pip freeze > requirements.txt命令生成一个包含所有已安装包及其版本的文件。然后&#x…

2024年几款优秀的SQL IDE优缺点分析

SQL 工具在数据库管理、查询优化和数据分析中扮演着重要角色。 以下是常见的 SQL 工具及其优缺点。 1. SQLynx 优点&#xff1a; 智能代码补全和建议&#xff1a;采用AI技术提供高级代码补全、智能建议和自动错误检测&#xff0c;大幅提高编写和调试SQL查询的效率。跨平台和…