HJ32密码截取

2023-10-28

有一定难度,难在考虑不周全,最后还是看了别人提到的方法,自己独立实现了一下,可能没有别人的简洁,但是易懂,调试的时候有些小毛病,但自己解决了,原因不是很清楚,最后总结里会提到。

目标:在输入的字符串里找到对称的且是最长的那个字符串

思路:(参考别人后)为了模拟全部的可能,需要考虑两种情况,且从头开始遍历

1. 偶数型:**AbbA**、**AAAA**

2. 奇数型:**AbA**

利用中心扩展法:

1.奇数时,1个 i 指针——让其分别向左右两边扩展,如果遇到左右两边相同则记录当前长度,继续扩展,不同则跳出,继续循环。

2.偶数时,i 、j 2个指针——让其 i 向左边扩展,j 向右边扩展,如果 当前两个位置元素相同,且扩展后的位置元素也相同,则记录当前长度,继续扩展,否则跳出,继续循环。

 代码:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int theLen1(string s)
{
	int count = 2;
	for (int i = 1; i < s.length(); i++)
	{
		int pre = i - 1;
		int next = i + 1;
		if (pre < 0 || next == s.length() || s[pre] != s[next] )
		{
			continue;
		}
		while ((pre >= 0 && next < s.length())&&s[pre] == s[next])
		{
			count = max(count, next - pre + 1);
			pre--;
			next++;
		}
	}
	return  count;	
}
int theLen2(string s)
{
	int count = 2;
	for (int i = 0,j=i+1; j < s.length(); i++,j++)
	{
		
		if (s[i] == s[j])
		{
			int pre = i - 1;
			int next = j + 1;
			if (pre < 0|| next == s.length() || s[pre] != s[next] )
				continue;
			while((pre >= 0 && next < s.length())&&s[pre] == s[next])
			{
				count = max(count, next - pre + 1);
				pre--;
				next++;
			}
		}
		else continue;
		
	}
	return  count;

}
int main()
{
	string s;
	while (cin>>s)
	{
		
		cout << max(theLen1(s), theLen2(s));
	}
	return 0;
}

总结:

1.因为题目给的案例必有对称,所以最少字符串长度为2,所以 count初始化为2;

2.i 必须从头开始,且采用两种方式遍历才能够将所有情况涵盖;

3. while 循环里 while ((pre >= 0 && next < s.length())&&s[pre] == s[next]),循环条件顺序不可颠倒,因为 前者的条件可能在执行后者的条件之前就已经发生了。简单的说就是,写循环条件时需要把可能会越界的条件写在前面!防止debug的时候异常中止。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HJ32密码截取 的相关文章

随机推荐

  • c语言旋转bmp图片程序,C语言实现BMP图像处理(任意角度旋转)

    原理参考 https blog csdn net liyuan02 article details 6750828 实现对对任意角度的旋转 具体数学推导网上找 如果各位读者需要使用 只需要将打开文件的位置改为你的位置 输入不同的角度即可 i
  • PyQt5组件之QSpinBox

    QSpinBox 简介 QSPINBox是一个计数器控件 允许用户选择一个整数值通过单击向上向下或者按键盘上的上下键来增加减少当前显示的值 当然用户也可以输入值在默认情况下 QSpinBox的取值范围是 0 99 每次改变的步长是1 QSp
  • 论文解读:PRINCE: Prefix-Masked Decoding for Knowledge Enhanced Sequence-to-Sequence Pre-Training

    论文解读 PRINCE Prefix Masked Decoding for Knowledge Enhanced Sequence to Sequence Pre Training Paper https aclanthology org
  • java1.7 0 45_Ubuntu下安装jdk1.7.0_45

    Ubuntu上安装jdk的 tar gz包 首先将 tar gz解压 具体方法为 tar xzvf tar gz 下面以我自己的安装版本 jdk1 7 0 45 为例 1 解压安装文件 tar xzvf jdk 7u45 linux x64
  • tensorflow不同版本对应的Python 版本,cuDNN版本,CUDA版本

    welcome to my blog 原图地址 Linux下的对应版本 macOS下的对应版本
  • MATLAB实现周期信号的傅里叶级数的展开

    MATLAB小白 不足之处还请多指教 设周期函数的波形为 求该周期信号的傅里叶级数展开式 并画出傅里叶展开后的波形 我们通过信号与系统的学习可以知道 周期函数可以通过一系列的三角函数的线性组合来逼近 如下图所示 首先我们可以通过三角函数的正
  • Mac下选择适合Unity的IDE

    以前都是Windows下使用Unity的 配合强大的visualstudio 写起代码来简直不要太爽 当我切换到Mac平台后 就感觉写代码的感受一下子回到了解放前 目前我尝试以下几种解决方案 终于让我写代码 1 vistualstudio
  • java.net.UnknownHostException完美解决。

    生产者会向Eureka注册 生产者如果部署在本机上 只需要部署以下参数即可 eureka instance instance id thisiswsgs01 设置服务描述 消费者只需要通过 http thisiswsgs01 user 1即
  • pubmed 影响因子_如何在Pubmed利用影响因子筛选文献?

    前几天给大家介绍了Pubmed上的2个神器 不知道的同学可以返回去看原文 两大神器 让你的PubMed飞起来 直接显示影响因子 Sci Hub链接 分区 用完之后是不是觉得方便了许多 今天 再给大家介绍一个使用Pubmed时候的小窍门 在P
  • UVA 401 Palindromes 题解

    Palindromes A regular palindrome is a string of numbers or letters that is the same forward as backward For example the
  • 制造企业有没有APS系统?生产车间如何计划排程和安排生产计划的?

    生产车间从组织职能上来说是以生产为重点的部门 生产计划应该由生产计划部来安排 如果从职能上来说 生产计划和生产车间放在一起会产生类似又当运动员又当裁判员的角色一样 从管理角度来看 生产计划和生产管理需要分开 原则上一个属于计划调度部门 一个
  • 记录一下实体类模型(Entity)的常用注解

    1 Data lombok注解 Data 注解的主要作用是提高代码的简洁 使用这个注解可以省去代码中大量的get set toString 等方法 2 TableName MybatisPlus注解 TableName注解主要是实现实体类型
  • 树莓派外设小开发(继电器、语音模块、超声波模块)

    wiringPi库安装与查看 首先要了解wiringPi库 wiringPi是一个很棒的树莓派IO控制库 使用C语言开发 提供了丰富的接口 GPIO控制 中断 多线程 等等 验证wiringPi的是否安装成功 输入gpio v 会在终端中输
  • 单片机C语言常用的头文件与库函数

    单片机C语言常用的头文件与库函数 以下头文件与库函数 只用头文件包含以下相应头文件即可调用 持续更新中 Intrins h头文件 函数名 函数原型 功能 返回值 crol unsigned char crol unsigned char v
  • 计算机密码输入正确,Win10输入正确密码却提示“密码不正确”如何解决

    在使用windows10系统过程中 很多用户都会遇到一些奇怪的问题 比如 有用户反馈开机登录win10的时候输入正确的登入密码 却碰到 密码不正确 请确认您的微软账户密码正确 的错误提示 无法登录 是怎么回事呢 在出现该问题的时候首先我们可
  • QT定时器的几种用法

    一 自定义定时器 定义一个定时器对象 绑定自定义槽函数 也可以定义定时器对象指针 这样可以一次性让多个定时器绑定同一个槽函数 头文件中加入 QTimer myTimer void myTimerEvent 自定义定时处理槽函数 在需要启动的
  • TCP的三次握手与四次挥手以及面试常见题

    TCP 是什么 TCP Transmission Control Protocol 传输控制协议 是一种面向连接的 可靠的 基于字节流的传输层通信协议 而且TCP是全双工模式 面向连接 你和你女朋友聊天是面向连接的 只有连接起来才可以通信的
  • 【Jmeter】什么是BeanShell?

    一 什么是BeanShell BeanShell是用Java写成的 一个小型的 免费的 可以下载的 嵌入式的Java源代码解释器 JMeter性能测试工具也充分接纳了BeanShell解释器 封装成了可配置的BeanShell前置和后置处理
  • 花生壳 linux客户端 命令

    phddns start service sshd status phddns status phddns version
  • HJ32密码截取

    有一定难度 难在考虑不周全 最后还是看了别人提到的方法 自己独立实现了一下 可能没有别人的简洁 但是易懂 调试的时候有些小毛病 但自己解决了 原因不是很清楚 最后总结里会提到 目标 在输入的字符串里找到对称的且是最长的那个字符串 思路 参考