传智杯 第六届—第二场—C

题目描述:

小红拿到了一个只包含 'a' , 'b' , 'c' 三种字符的字符串。小红想知道,这个字符串最短的、长度超过 1 的回文子串的长度是多少?

子串定义:字符串取一段连续的区间。例如"abcca"的子串有"ab"、"bcca"等,但"aca"则不是它的子串。回文的定义:一个字符串正着读和倒着读都是相同的,那么定义它的回文的。

输入描述:

一个只包含 'a' , 'b' , 'c' 三种字符的字符串。数据范围:字符串长度不小于2,且不超过100。

输出描述:

如果不存在长度超过1的回文子串,则输出-1;否则输出长度超过1的最短回文子串的长度。

示例1

输入:

复制代码
abcca

输出:

复制代码
2

说明:

"cc"即为其最短回文子串。

示例2

输入:

复制代码
abcab

输出:

复制代码
-1

解题思路:

本题的解题思路很直接,直接从第一个字符开始遍历,将其与最后一个字符进行从后往前比较,如果相同则将j++,k--,即比较下一组的字符,如果不相同则j退回到原位,k回到最开始比较的上一个位置重新进行比较,比较过程类似于字符串匹配算法中的暴力匹配算法,只不过暴力匹配算法是两个字符串进行比较,而本题是字符串首尾进行比较。当j>=k的时候,就代表有一个回文子串的存在,将这个子串长度和最小的子串长度进行比较,保留最小的长度即可。

注意:

①输出的为最小的回文子串的长度。

代码:

cpp 复制代码
#include<iostream>
#include<string>
using namespace std;
int  main()
{
	string arr;   //表示字符串
	getline(cin, arr);

	int min = 100;   //用于记录最长回文子串的字符个数
	for (int i = 0;i < arr.length();i++)
	{
		for (int g = arr.length() - 1;g > i;g--)
		{
			int j = i;
			int k = g;
			while (arr[j] == arr[k])
			{
				j++;k--;   //判断下一对是否一样
				if (j >= k)
				{
					min < g - i + 1 ? min = min : min = g - i + 1;
					break;
				}
			}
		}
	}
	//输出
	min != 100 ? cout << min << endl : cout << "-1" << endl;

	system("pause");
	return 0;
}
相关推荐
m0_720245012 小时前
1543.统计好三元组(简单)
开发语言·算法
To_OC2 小时前
LC 560 和为 K 的子数组:前缀和配哈希表,这对组合我是真的服了
javascript·算法·程序员
hans汉斯3 小时前
《软件工程与应用》期刊推荐&10月版面征稿中
图像处理·人工智能·深度学习·算法·音视频·软件工程
叠层归一研究院3 小时前
AGI 系统(八):符号范畴嵌入函子 — SymCat ↪ C_M107 严格化
c语言·开发语言·人工智能·算法·transformer·agi
其美杰布-富贵-李4 小时前
08 进阶评估指标与算法特定指标
人工智能·算法
.道阻且长.4 小时前
5.LeetCode算法习题讲解--双指针--有效三角形的个数
算法·leetcode·职场和发展
我是海飞5 小时前
杰理JL703N SSD1306 OLED(128x64) 点阵屏移植说明
单片机·算法·嵌入式·音频·杰理
wabs6665 小时前
关于图论【最短路径之Bellman_ford 算法(单源有限最短路)|卡码网96.城市间货物运输III的思考】
数据结构·算法·图论·卡码网·bellman_ford·单源有限最短路
wuyk5556 小时前
2.队列:先进先出的线性数据结构
c语言·数据结构·stm32·单片机
会周易的程序员7 小时前
aiDgePLC — IEC61131-3 ST PLC 虚拟机调试与运行环境
c++·物联网·虚拟机·st·工业协议·iec61131·梯形图