网站首页 > 文章精选 正文
引言
字符串回文是C/C++面试中常见的问题之一,该内容主要考察面试者对于代码设计的鲁棒性、时间复杂度和空间复杂度的考虑,同时需要对代码的异常做和是判断,想要实现相关的代码不难,但是想要设计出鲁棒性较好的代码,需要花费一定的形式
示例需求描述
对于长度为n的一个字符串A(仅包含数字,大小写英文字母),请设计一个高效算法,计算其中最长回文子串的长度。
代码设计思路:通过回文字符串的特性,正反读取都相同,可以将字符串逆转后,求取最长公共子串,但可能会出现其他部分重置与另一部分相同,所以需要对比找到最长公共子串的索引与原索引相加是否为字符串长度-1,即 当A.at(right + 1) == A.at(left - 1)时,maxLen = right - left + 1;
测试用例:
示例1
输入:
"ababc"
返回值:
3
说明:
最长的回文子串为"aba"与"bab",长度都为3
示例2
输入:
"abbba"
返回值:
5
示例3
输入:
"b" 返回值:1
示例代码:
int getLongestPalindrome(string A, int n)
{
//边界条件判断
if (n < 2)
return A.length();
//maxLen表示最长回文串的长度
int maxLen = 0;
for (int i = 0; i < n; ) {
//如果剩余子串长度小于目前查找到的最长回文子串的长度,直接终止循环
// (因为即使他是回文子串,也不是最长的,所以直接终止循环,不再判断)
if (n - i <= maxLen / 2)
break;
int left = i;
int right = i;
while (right < n - 1 && A.at(right + 1) == A.at(right))
++right; //过滤掉重复的
//下次在判断的时候从重复的下一个字符开始判断
i = right + 1;
//然后往两边判断,找出回文子串的长度
while (right < n - 1 && left > 0 && A.at(right + 1) == A.at(left - 1)) {
++right;
--left;
}
//保留最长的
if (right - left + 1 > maxLen) {
maxLen = right - left + 1;
}
}
//截取回文子串
return maxLen;
}
};
结语
对于一个一个字符串的最大回文的计算,我们也可以使用的是中心位置法,遍历去头去尾的字符串,若字符串左边右边相等,则两个指针定位左边右边,同时向外扩展直到不相等,则回文长度是right_point - left_point - 1;若字符串左边或者右边的某一位与该字符串相等,则指针定位这两个相等的字符,并同时向外扩展直到不相等,方法相同。
猜你喜欢
- 2025-04-26 Java笔试题目-获取最长不含重复子串的长度
- 2025-04-26 八卦的符号及其涵义:
- 2025-04-26 西门子PLC之间S7通讯的技巧和经验
- 2025-04-26 聊聊字符集编码与数据压缩
- 2025-04-26 MYSQL有哪些数据类型
- 2025-04-26 散列算法比较:MD5、SHA1、SHA256有哪些区别
- 2025-04-26 慢 SQL 分析与优化
- 2025-04-26 分列出长度各异的一列字符串的最后一位,Excel 补上了这个功能
- 2025-04-26 CHAR与VARCHAR详解
- 2025-04-26 Python 实现【找出经过特定点的路径长度】
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)