当前位置: 首页 > news >正文

(c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度

适用情况:
①题目中出现最短,最长
②出现子串、子数组、子数列

给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度,字符串本身是其最长的子串,子串要求:

1、 只包含1个字母(a~z, A~Z),其余必须是数字;

2、 字母可以在子串中的任意位置;

如果找不到满足要求的子串,如果全是数字,则返回-1。

//套用模板
#include<stdio.h>
#define MAXN 10000
int isNumber(char c) {return (c>='0'&&c<='9');
}
int main(){char str[MAXN]={0};scanf("%s",str);char *left=str;char *right=str;int bestresult=0;int tag=0;while(*right!='\0'){                                       //只要右指针没有到字符串尾部while(tag==1&&!isNumber(*right)&&left<right){                   //子串不满足要求时(有两个字母),不满足时才缩小为求最长子串left++;                                             //一直向右移动直到子串满足条件if(!isNumber(*(left-1))){                            //左指针略过最左边字母后子串满足条件,跳出循环break;}}tag= isNumber((*right))?tag:1;if(tag==1){bestresult=bestresult>(right-left+1)?bestresult:(right-left+1);}right++;}printf("%d",bestresult);return 0;
}

滑动窗口的最长子串模板

初始化 left,right,result,bestResult
while("右指针没有到结尾"){窗口扩大,加入right对应元素,更新当前resultwhile("result不满足要求"){窗口缩小,移除left对应元素,left右移}更新最优结果bestResultright++;
}
返回bestResult

滑动窗口的最短子串模板

初始化 left,right,result,bestResult
while("右指针没有到结尾"){窗口扩大,加入right对应元素,更新当前resultwhile("result满足要求"){更新最优结果bestResult窗口缩小,移除left对应元素,left右移}right++;
}
返回bestResult
//学习kmp记录next数组
#include<stdio.h>
#define MAXN 10000
int isNumber(char c) {return (c>='0'&&c<='9');
}
int main(){char str[MAXN]={0};scanf("%s",str);char *left=str;char *right=str;char *next_pos=str;int bestresult=0;int tag=0;while(*right!='\0'){                                       //只要右指针没有到字符串尾部if(!isNumber(*right)){next_pos=right+1;}if(tag==1&&!isNumber(*right)) {                   //子串不满足要求时(有两个字母),不满足时才缩小为求最长子串left = next_pos;}tag= isNumber((*right))?tag:1;if(tag==1){bestresult=bestresult>(right-left+1)?bestresult:(right-left+1);}right++;}printf("%d",bestresult);return 0;
}
//计算字母左边右边数字之和
#include<stdio.h>
int main(){int max=-1;int left_sum=0;int right_sum=0;int len=0;char str[1000]={0};char *p=str;scanf("%s",str);while(*p>='0'&&*p<='9'){p++;left_sum++;}while(*p!='\0'){p++;right_sum=0;while(*p>'0'&&*p<'9'){p++;right_sum++;}len=left_sum+right_sum+1;max=(len>max)?len:max;left_sum=right_sum;}printf("%d",max);return 0;
}

相关文章:

  • python中的josn方法相关介绍
  • indexeddb使用场景
  • 【格密码基础】:详解Ring-SIS问题
  • 关于Python运用pyecharts实现简单的数据分析-——柱状图、饼状图
  • 计算机网络-数据交换方式(电路交换 报文交换 分组交换及其两种方式 )
  • springboot(ssm同城上门喂遛宠物系统 宠物预约系统Java系统
  • 提升工作效率,畅享便捷PDF编辑体验——Adobe Acrobat Pro DC 2023
  • 分类预测 | Matlab实现DT决策树多特征分类预测
  • 计算机网络_1.3电路交换、分组交换和报文交换
  • 3338 蓝桥杯 wyz的数组IV 简单
  • 每次请求sessionid变化【SpringBoot+Vue】
  • Docker consul的容器服务更新与发现
  • k8s中调整Pod数量限制的方法
  • 【C++】STL之空间配置器(了解)
  • 【数据结构 08】红黑树
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 30天自制操作系统-2
  • bootstrap创建登录注册页面
  • Docker下部署自己的LNMP工作环境
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • HTTP中GET与POST的区别 99%的错误认识
  • Netty 4.1 源代码学习:线程模型
  • scrapy学习之路4(itemloder的使用)
  • SQLServer插入数据
  • V4L2视频输入框架概述
  • 读懂package.json -- 依赖管理
  • 观察者模式实现非直接耦合
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 缓存与缓冲
  • 人脸识别最新开发经验demo
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • MyCAT水平分库
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • $.ajax()
  • (1)(1.9) MSP (version 4.2)
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (6)设计一个TimeMap
  • (7)STL算法之交换赋值
  • (LeetCode 49)Anagrams
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (转) 深度模型优化性能 调参
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net core 依赖注入的基本用发
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET/C# 使窗口永不获得焦点
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .Net小白的大学四年,内含面经
  • .sh 的运行
  • @NestedConfigurationProperty 注解用法
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [1] 平面(Plane)图形的生成算法
  • [4.9福建四校联考]