首页 > 其他分享 >401 最长回文子串

401 最长回文子串

时间:2024-12-25 15:08:47浏览次数:3  
标签:子串 int 401 字符串 最长 回文

// 401 最长回文子串.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
http://oj.daimayuan.top/course/22/problem/933


给你一个字符串 s,字符串由小写字母组成,现在你需要求出 s中最长的回文子串的长度。

输入格式
一行一个字符串 s。

输出格式
输出一个整数表示答案。

样例输入
abbabbab
样例输出
7
数据规模
对于所有数据,保证 1≤|s|≤105,字符串均由小写字母构成。
*/

#include <iostream>
#include <cstring>

using namespace std;

//字符串哈希 和二分长度 然后顺序 逆序检测


int n, m, p[200002];
char s[100002], t[200003];

void manacher() {
	n = strlen(s + 1);
	m = 0;
	t[++m] = '#';
	for (int i = 1; i <= n; i++) {
		t[++m] = s[i]; t[++m] = '#';
	}
	int M = 0, R = 0;
	for (int i = 1; i <= m; i++) {
		if (i > R)
			p[i] = 1;
		else
			p[i] = min(p[2*M-i],R-i+1);
		while (i - p[i] > 0 && i + p[i] <= m && t[i - p[i]] == t[i + p[i]])
			++p[i];
		if (i + p[i] - 1 > R)
			M = i, R = i + p[i] - 1;
	}
	int ans = 0;
	for (int i = 1; i <= m; i++)
		ans = max(ans, p[i]);
	cout << ans - 1 << endl;
}


int main()
{
	cin >> s + 1;
	manacher();
	return 0;
}

标签:子串,int,401,字符串,最长,回文
From: https://www.cnblogs.com/itdef/p/18630446

相关文章

  • leetcode 05 回文字符串
    leetcode05回文字符串1.描述给你一个字符串,找到里面最长的回文字符串2.事例示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb"3.思路3.1什么是回文字串abbaabcba我们把这种不管是从前到后读还是从后到前读都......
  • 76. 最小覆盖子串
    题目链接解题思路:以i开头,最小覆盖子串是什么,然后求出所有的结果,最小的便是。先求出i的结果,是[i,j],然后求i+1时,直接从j后遍历即可。窗口的思想,窗口在[i,j],然后来到i+1,先把i弹出去,弹出去的前提是,s[i]是我们需要的字符。然后再看[i+1,j]是否满足,如果不满足,右边界再继续扩......
  • 最小覆盖子串
      滑动窗口算法的思路是这样:1、我们在字符串S中使用双指针中的左右指针技巧,初始化left=right=0,把索引左闭右开区间[left,right)称为一个「窗口」。2、我们先不断地增加right指针扩大窗口[left,right),直到窗口中的字符串符合要求(包含了T中的所有字符)......
  • 【字符串】-Lc5-最长回文子串(中心扩展法)
    写在前面  最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。目录写在前面一、场景描述二、具体步骤1.环境说明2.代码写在后面一、场景描述  最长回文子串。给你一个字符串s,找到s中最长的回文子串。定义:如果字符串的反......
  • 【华为OD-E卷-最多提取子串数目 100分(python、java、c++、js、c)】
    【华为OD-E卷-最多提取子串数目100分(python、java、c++、js、c)】题目给定[a-z],26个英文字母小写字符串组成的字符串A和B,其中A可能存在重复字母,B不会存在重复字母,现从字符串A中按规则挑选一些字母,可以组成字符串B。挑选规则如下:同一个位置的字母只能挑选一次......
  • ACwing 1524. 最长回文子串
    ACwing1524.最长回文子串因为这个题的数据范围只有1000,所以能O(n)枚举,枚举回文子串的中点,然后向两边延展,看看极限长度是多少,注意每次要区分奇数长度字串和偶数长度字串,两种的计算方式不一样。#include<iostream>#include<cstdio>#include<cstdlib>intmain(){ std::s......
  • 回文链表
    给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。示例1:输入:head=[1,2,2,1]输出:true示例2:输入:head=[1,2]输出:false 思路:使用栈来存储节点值,然后开始比对/***Definitionforsingly-linkedlist.*str......
  • LeetCode题集-9 - 回文数
    题目:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。01、反转字符串法此题我第一反应就是直接把整数转为字符串,然后通过字符串Reverse方法,反转字符串,最后......
  • 2024-2025-1 20241401 《计算机基础与程序设计》 第十三周学习总结
    班级链接2024计算机基础与程序设计作业要求第十三周作业教材学习内容总结《C语言程序设计》第12章结构体的定义和使用:结构体类型的定义,以及结构体变量的创建和使用。结构体允许将不同数据类型的成员组合成一个整体,以便于管理和引用。结构体变量的初始化:结构体......
  • 最小覆盖子串(滑动窗口)
    给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。   注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如果 s 中存在这样的......