面试题整理-线性时间求最长回文子串

KMP算法:线性时间O(n)字符串匹配算法 《算法导论》一书中有一句话,我认为说的非常透彻:“这两个程序有很多相似之处,因为它们都是一个字符串对模式P的匹配:KMP-MATCHER是文本T针对模式P的匹配,COMPUTE-PREFIX是模式P针对自己的匹配。” 阅读详情
Longest Palindromic Substring

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length ofS is 1000, and there exists one unique longest palindromic substring.


这里给出代码如下:

#define get(i) (i? ((i&1)? '-': str[(i>>1)-1]): '$')
string longestPalindrome(string &s)
{
	int i, max_right_center = 0, max_right_length = 0;
	int max_center = -1, max_length = -1, t, len = s.length();
	const char *str = s.c_str();
	int *p = new int[len << 3];

	for (i = 1; '\0' != get(i); ++i){
		p[i] = 1;

		if (max_right_length > i) {
			int j = (max_right_center<<1) - i;
			p[i] = std::min(p[j], max_right_length - i);
		}

		while (get((i-p[i])) == get((i+p[i]))) ++p[i];
		
		if (p[i] > max_length){
			max_length = p[i];
			max_center = i;
		}

		t = i + p[i];
		if (t > max_right_length){
			max_right_length = t;
			max_right_center = i;
		}
	}

	delete [] p;

	int start = max_center - max_length + 1;
	start += (start&0x01); start >>= 1; --start;
	return s.substr(start, max_length - 1);
}

可以看一下线性时间回文串的处理方法,值得一提的是最后的长度是max_length - 1;

寻找起点的过程如下:

首先是在$_a_b_c类似的字符串中找到起点。

当发现起点指向_符号的时候,就向前走一格。也就是start += (start & 0x01)

接着再定位一下每个字符在原始字符中的位置。如a的位置是2 原始位置为0.b位置为4,原始位置为1.

则是start = (start>>1)-1

从而可以得到子串。

网易AI算法岗面试9题深度解析:机器学习基础、手撕代码与业务场景实战 机器学习模型的泛化能力是算法工程师的核心基础,它决定了模型在未知数据上的表现。过拟合与欠拟合是影响泛化能力的关键问题,其判别、成因与解决方案构成了模型调优的基石。从原理上看,过拟合源于模型过于复杂或数据不足,欠拟合则因模型能力不足或特征信息不够。技术价值在于,通过正则化、数据增强、调整模型复杂度等手段,可以显著提升模型的实用性和鲁棒性。在应用场景中,无论是推荐系统、自然语言处理还是反欺诈系统,处理好模型泛化问题都至关重要。本文结合网易AI算法岗的真实面试题,深入探讨了包括过拟合与欠拟合、逻辑回归损失函数、批 阅读详情

相关推荐

北航机器学习期末考试试题2020年春

北航机器学习期末考试试题2020春 看csdn上试题收费,积分还挺高,本着共享的理念,把2020春季ML考试的试题公开,若侵权,立删 前8道题10分,第9题20分 决策树采用ID3算法 对宇宙星球是否适合生存分类 SVM的原理;软间隔、硬间隔;以及对非线性样本点分类 集成学习的原理,以及及串行boosting以及bagging的简单概括 K-means与混合高斯模型的异同以及EM算法的原理,如何计算 马尔可夫随机场最大团;马尔可夫随机场的联合概率分布(势函数表示),贝叶斯网络联合概率分布 PCA主成分基于

qq_43343919的博客 5414

字节跳动算法岗校招复盘:从KMP到动态规划的备考实战指南

在互联网大厂技术岗位的求职中,算法与数据结构始终是衡量候选人核心能力的硬性标准。从字符串匹配的KMP算法到动态规划的经典模型,从TopK问题的堆解法到逻辑回归的公式推导,掌握这些基础技术原理不仅是为了应对笔试,更是构建工程化思维的关键路径。无论是现场手撕代码时的复杂度分析,还是系统设计中的推荐架构,算法功底都直接决定了解决问题的效率与深度。本文以一线大厂算法岗的真实校招流程为样本,深入拆解笔试与面试中的高频考点、常见题型及实用答题策略,并给出从LeetCode分类练习到模拟面试的完整备考路线。无论你是即将参

weixin_34122810的博客 421

基于HPM5E00的EtherCAT从站开发实战:从硬件解析到软件调试

实时工业以太网通信是工业自动化与运动控制领域的核心技术,它通过硬件与协议栈的协同,实现了微秒级的高确定性数据交换。其技术价值在于为多轴同步、机器人控制等复杂场景提供了高实时性、高同步精度的通信基础。在应用场景上,广泛服务于数控机床、包装机械、半导体设备等高端制造领域。本文聚焦于EtherCAT从站开发,深入解析了基于先楫HPM5E00高性能MCU与专用从站控制器(ESC)的硬件架构设计,并详细阐述了开源协议栈SOES的移植、对象字典配置以及过程数据(PDO)映射等核心软件实践,为开发者快速构建稳定可靠的实时

weixin_30915951的博客 501

最长回文子串(LeetCode 5

出处题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”马拉车算法这个马拉车算法Manacher‘s Algorithm是用来查找一个字符串的最长回文子串的线性方法,由一个叫Manacher的人在1975年发明的,这个方法的最大贡献是在于将时间复杂度提升到了线性,这是非常了不起的。

2401_83916204的博客 607

电力电子课设救星:用Simulink实现Buck变换器双闭环控制(PID调参技巧)

本文是电力电子课程设计的实用指南,详细讲解如何利用Simulink仿真平台实现Buck变换器的电压电流双闭环控制。文章核心聚焦于PID参数整定的实战技巧,提供了从手动调试口诀到MATLAB脚本自动优化的完整方案,旨在帮助学生高效完成课设,深入理解闭环控制原理并生成专业报告。

weixin_29179311的博客 296

HyperLynx实战:手把手教你搞定DDR4信号完整性仿真(附ODT与终端电阻配置避坑)

本文详细介绍了使用HyperLynx进行DDR4信号完整性仿真的实战技巧,重点解析了ODT配置与终端电阻优化的黄金法则。通过模型准备、拓扑构建、ODT扫描等关键步骤,帮助硬件工程师规避常见设计陷阱,提升高速数字电路设计的效率与可靠性。

weixin_30861797的博客 639

【LeetCode练习题】5. 最长回文子串

写在前面 这个题目之前在高中的时候就曾经写过,现在到了研究生很多东西需要再重新捡起来的呢,在面试中也曾经两次遇到这样的题目,现在在今天2020年3月12日10:14:49统一整理一下,预计花费2个小时的时间。 题目描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: “babad” 输出: “bab” 注意: “aba” 也是一个...

机器学习初学者必看,关注我,一起了解机器学习 278

使用conda环境python3.13和python3.12下安装vllm过程记录

使用conda环境python3.13和python3.12下安装vllm过程记录

没刮胡子的程序员专栏 885

(限时收藏)1024道AI算法高频面试题完整清单(附最优解法路径)

掌握AI算法面试核心方法,高效突破技术难题。本清单精选AI算法题1024道:面试必刷清单,覆盖机器学习、深度学习等高频考点,提供最优解法路径与实战技巧,助力快速提升应试能力,值得收藏。

AlgoInk的博客 708

STM32入门教程:图像处理

然后,我们使用 STM32 的 DSP 模块中的 arm_mean_u8 函数计算原始图像的平均值,并将结果存储在 meanValue 变量中。然后,我们需要编写代码配置 STM32 的外部中断输入引脚,并在中断处理函数中读取 OV7670 摄像头模块输出的图像数据。然后,我们需要编写代码配置 STM32 的 USB OTG 接口,并在回调函数中读取 USB 摄像头输出的图像数据。一、图像采集 图像采集是图像处理的第一步,我们需要将外部图像源的数据导入到 STM32 中进行处理。

2401_85625565的博客 1616

Spring AI 项目实战(三):Spring Boot + AI + DeepSeek 打造智能客服系统(附完整源码)

摘要 本文介绍了基于Spring Boot 3.2和Spring AI 1.0.0-M4构建智能客服系统的技术方案。系统采用分层架构设计,集成DeepSeek API提供自然语言处理能力,使用MyBatis和H2数据库实现数据持久化,并通过Thymeleaf+Bootstrap构建前端界面。文章详细阐述了项目的技术栈选择、Maven依赖配置、应用架构设计,以及各模块的功能划分,为开发者提供了完整的智能客服系统实现方案,涵盖从后端服务到前端交互的全流程开发指导。

博客 3843

【huawei】机考整理

虽然现在很多牛客的题目没要求构造输入输出(牛客叫核心代码模式),但是实际考试还是需要的(牛客叫ACM模式),平时刷题需要注意区分,多刷需要自己构造的。尤其是二叉树之类的题目,输入输出构造会比较花时间,练习的时候多留意输入输出构造,机试可以节省很多时间。按照算法的难度和频率大致可以分为必会和进阶两种类型,每个子项排序表示考察的频率,序号越低,考察频率越高,比如数组是考察频率最高的。最终机考在牛客,如果平时比较习惯刷LeetCode,一定要在牛客上的高频考题都刷几题,熟悉输入输出。可以根据知识点来过滤题型。

u011537504的博客 709

喷涂机器人系列编程:ABB IRB 5500_(2).ABB IRB 5500喷涂机器人系统架构与组件

ABB IRB 5500喷涂机器人系统不仅在性能上表现出色,而且在安全和维护方面也提供了全面的解决方案。通过本文的详细介绍,希望读者能够更好地理解和掌握这一系统的架构和功能,为实际应用提供有力支持。

zhubeibei168的博客 777

coding-interview-gym中的动态规划精选:从基础到进阶的15个经典问题

想要在编程面试中脱颖而出?动态规划(Dynamic Programming)是每个程序员必须掌握的核心技能!😊 今天,我将带你深入探索**coding-interview-gym**项目中精心整理的15个动态规划经典问题解决方案。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的面试准备资源。 ## 📚 什么是coding-interview-gym? **coding-in

gitblog_00816的博客 363

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

android 面试题

ContextImpl.startActivity → Instrumentation.execStartActivity → AMS.startActivity → 校验权限、创建 ActivityRecord、Pause 当前 Activity → ApplicationThread.scheduleTransaction → ActivityThread.H → LaunchActivityItem → performLaunchActivity(创建 Activity、调用 onCreate)。

qq_25657125的博客 392

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

百度后端C++研发工程师2019年秋招面经总结

面试之前把百度C++的面经捋了一遍。 面试总结: 1. 强度大。三轮技术面,中间几乎不休息。时间长度在三小时到四个半小时之间(我就被连续搞了四个半小时)。个人来说,一面偏实习项目介绍和算法。实习项目抠的非常细,面试官把各种情况的处理问了一遍,假如不是你做的肯定会被问的比较尴尬。。。项目结束两道算法题,一道剑指 offer里复杂链表复制,第二道让对其进行优化,要求比剑指 offer里的实现算法少...

shantf93的博客 2088

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

爱奇艺2020校招编程题复盘:考点拆解与高效备战指南

校招笔试是互联网公司选拔技术人才的核心环节,编程题往往综合考查算法基础、代码实现与工程思维。在实际笔试中,字符串处理、动态规划、树与图等数据结构与算法是高频考点,掌握滑动窗口、状态转移、贪心策略等经典解法至关重要。这些技术能力不仅用于解决算法题,更直接对应视频平台中的搜索匹配、推荐排序、CDN调度等真实业务场景。理解从暴力解法到最优解法的演进过程,并注重输入输出、边界条件等工程细节,是提升笔试通过率的关键。本文以爱奇艺2020校招编程题为切入点,梳理题型分布、核心考点与备战路线,帮助读者系统准备大厂笔试。

weixin_33924770的博客 325

校招数据结构笔试题解析:从链表到哈希表的备考攻略

数据结构是计算机科学的核心基石,无论是链表、栈、队列还是二叉树、哈希表,都构成了算法与系统设计的底层逻辑。理解这些结构的原理与复杂度,是解决实际工程问题的关键能力。在技术面试中,考察候选人对数据结构内功的掌握程度,已成为企业筛选人才的重要标准。从链表反转到二叉树遍历,从快排到哈希冲突处理,每类考点都对应着真实业务中的性能优化场景。本文基于某电商平台校招笔试题,系统梳理高频考点与解题思路,帮助读者建立从基础概念到工程实践的完整认知框架,从而在笔试与面试中游刃有余。

weixin_30402343的博客 321

2026年AI时代程序员学习路线图:从零基础到拿大厂Offer的完整规划(2万字深度长文)

本文为不同阶段的程序员绘制完整学习路线图,覆盖零基础入门到架构深挖四个阶段,附在职跳槽和应届校招时间规划模板及常见误区避坑指南。

热爱技术与前沿创新,深耕科技领域,在科创中精进自我;探索技术乐趣,分享技术干货与成长心得,以技术为伴,热爱生活,在科创与生活中双向成长。 1080

【算法】常见基础算法

常见算法:双指针、滑动窗口、前缀和、二分、分治归并、分治快排、BFS、DFS、递归、回溯、FloodFill等

志之所趋,无远弗届,穷山距海,不能限也 1327

面试题整理-最小没出现的整数

题目: #面试题#给定一个无序的整数数组,怎么找到第一个大于0,并且不在此数组的最小整数。比如[1,2,0] 返回 3, [3,4,-1,1] 返回 2。最好能O(1)空间和O(n)时间。 来源http://weibo.com/lirenchen。   解法: 直接考虑这个问题是比较困难的。不如先换个简单的问题。   问题1 给定一个数组,长度为n,除a[0]以外,其他元素都是a[

ju136的专栏 8760

面试题整理-大数求和

题意很简单,就是求两个任意整数之和。 原题在: http://acm.hdu.edu.cn/showproblem.php?pid=1002 首先说一下正确的思路: 第一步: 输入的处理: 如果输入是00000123344需要处理为123344。 函数为: string &_del_zeros_before_dot(string &a) { if (a.len

ju136的专栏 5117

面试题整理-斐波那契数列

这个很好。其实也就是f(0) = 0, f(1) = 1. 然后 f(n) = f(n-1) +  f(n-2); 测试链接 http://ac.jobdu.com/problem.php?cid=1039&pid=3 求解 #include #include long long a[71]; void init(void) { a[0] = 0; a[1] = a[

ju136的专栏 3826

面试题整理-从数组中删除指定元素

题目: 陈利人:#Facebook面试题#这是一个编程题,动手做做才会有体会。给一个数组和一个值,从数组中删除这个指定的值的所有出现, 并且返回新的数组的长度。size_t remove_elem(T* array, size_t len, T elem) {}。 解题: 首先可以想到的是,用额外用一个数组。遇到不同的元素,就把此元素拷至额外的数组中。 实际上,很快就可以发现

ju136的专栏 3227

面试题整理-卡特兰数问题收集

首先说一下卡特兰数列, H(n) = C(n, 2n) / (n+1) = (2n)!/(n!n!(n+1)) H(3) = 5;   题目1: 矩阵的乘法添加括号我们知道,A*B可以,但是并不表示B*A也可以。假设有N+1个矩阵相乘,不能交换次序。只能用添加括号的方法来修改乘积的次序。那么有多少种添加括号的方法。 H(n)种。   题目2: 出栈次序问题,一个栈,其进栈的序列是

ju136的专栏 3003

面试题整理-矩阵查找元素

需要在矩阵中查找元素。这个矩阵的排列如下: 每一行都是有序的。每一列都是有序的。 比如一个小矩阵。 10 30 20 80 现在,我们需要在一个这样N * M的矩阵中找到一个元素,并返回其位置。 思路 首先,这个题不太适合二分查找。因为并不能保证第二行的元素都一定比第一行的任意元素大。 所以应该是很难找到O(lgN)的算法。 每次都是取

ju136的专栏 2992
上一篇: 面试题整理-链表形式大数求和
下一篇: 面试题整理-3数之和为0
ju136
博客等级 码龄19年 95粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值