[创新工场]2014创新工场校园招聘之回文串修复

2024-02-19 02:48

本文主要是介绍[创新工场]2014创新工场校园招聘之回文串修复,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【题目】

所谓回文,就是正序和倒序遍历结果一样的字符串,比如'aba', 'abcdedcba'。实现一个方法pal(),输入一个字符串,打印出以这个字符串为前缀的一个回文。比如输入'abc',pal()方法打印出'abcdcba'或'abcba';输入'abcb',可以输出'abcbcba'或'abcba'。如果可能,输出尽量短的结果。

【思路一】

  以abcdc为例,以此为前缀的回文有 'abcdccdcba', 'abcdcdcba','abcdcba',即在输入的字符串后面添加字符,使之成为回文字符串

  方法一、最先想到的办法就是把输入的字符串倒序拼接在原字符串后面,如原字符串为'abcdc',倒序为'cdcba',拼接的结果为'abcdccdcba',然后不断删除倒序的字符,拼接上去,判断是否是回文,是,则输出,不是,则继续删除字符。比如:

           1)'abcdcdcba'是回文

           2)'abcdccba'不是回文

           3)'abcdcba'是回文

           最后一个是回文的字符串即未最短的回文字符串。

这样的话,每次可能都求出几个没用的回文串,例如上面的'abcdcdcba'是回文,题目要求是求最短的回文串,因此我们从最短可能的回文串开始。

先判断字符串本身是不是回文串,如果不是,一次添加字符,a,ba,cba,dcba,cdcba判断。

#include <string.h>
#include <iostream>
using namespace std;//判断是否是回文串
bool IsPalindrome(char* str){int len = strlen(str);for(int i = 0,j = len - 1;i < j;i++,j--){if(str[i] != str[j]){return false;}}return true;
}
// 回文串修复
char* pal(char* s){int len = strlen(s);char* str = new char[2*len+1];for(int i = 0;i < len;i++){str[i] = s[i];}// 本身就是回文串if(IsPalindrome(s)){return s;}for(int i = 0;i < len;i++){int index = len;for(int j = i;j >= 0;j--){str[index++] = s[j];}str[index] = '\0';if(IsPalindrome(str)){return str;}}
}int main(){char* str="amanaplanacanal";cout<<pal(str);return 0;
}

【思路二】

若需要找最短的回文,则要求在原字符串后面新添的字符串长度尽量短。只要在原字符串中找到某一位置,在此位置(含)后面全为回文,只要把此位置前的字符倒序追加在原字符串后即可。故只需要找出最前的该位置即可。

#include <string.h>
#include <iostream>
using namespace std;//判断是否是回文串
bool IsPalindrome(char* str){int len = strlen(str);for(int i = 0,j = len - 1;i < j;i++,j--){if(str[i] != str[j]){return false;}}return true;
}
// 回文串修复
char* pal(char* s){int len = strlen(s);char* str = new char[2*len+1];for(int i = 0;i < len;i++){str[i] = s[i];}// 修复for(int i = 0;i < len;i++){// 找到位置i,使i(含)后的字符串为回文if(IsPalindrome(s+i)){int index = len;// 将i之前的字符倒序添加源字符串后for(int j = i-1;j >= 0;j--){str[index++] = s[j];}str[index] = '\0';return str;}}
}int main(){char* str="xyz";cout<<pal(str);return 0;
}





这篇关于[创新工场]2014创新工场校园招聘之回文串修复的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/723278

相关文章

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

mss32.dll文件丢失怎么办? 电脑提示mss32.dll丢失的多种修复方法

《mss32.dll文件丢失怎么办?电脑提示mss32.dll丢失的多种修复方法》最近,很多电脑用户可能遇到了mss32.dll文件丢失的问题,导致一些应用程序无法正常启动,那么,如何修复这个问题呢... 在电脑常年累月的使用过程中,偶尔会遇到一些问题令人头疼。像是某个程序尝试运行时,系统突然弹出一个错误提

电脑提示找不到openal32.dll文件怎么办? openal32.dll丢失完美修复方法

《电脑提示找不到openal32.dll文件怎么办?openal32.dll丢失完美修复方法》openal32.dll是一种重要的系统文件,当它丢失时,会给我们的电脑带来很大的困扰,很多人都曾经遇到... 在使用电脑过程中,我们常常会遇到一些.dll文件丢失的问题,而openal32.dll的丢失是其中比较

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl

电脑提示msvcp90.dll缺少怎么办? MSVCP90.dll文件丢失的修复方法

《电脑提示msvcp90.dll缺少怎么办?MSVCP90.dll文件丢失的修复方法》今天我想和大家分享的主题是关于在使用软件时遇到的一个问题——msvcp90.dll丢失,相信很多老师在使用电脑时... 在计算机使用过程中,可能会遇到 MSVCP90.dll 丢失的问题。MSVCP90.dll 是 Mic

电脑报错cxcore100.dll丢失怎么办? 多种免费修复缺失的cxcore100.dll文件的技巧

《电脑报错cxcore100.dll丢失怎么办?多种免费修复缺失的cxcore100.dll文件的技巧》你是否也遇到过“由于找不到cxcore100.dll,无法继续执行代码,重新安装程序可能会解... 当电脑报错“cxcore100.dll未找到”时,这通常意味着系统无法找到或加载这编程个必要的动态链接库

C++实现回文串判断的两种高效方法

《C++实现回文串判断的两种高效方法》文章介绍了两种判断回文串的方法:解法一通过创建新字符串来处理,解法二在原字符串上直接筛选判断,两种方法都使用了双指针法,文中通过代码示例讲解的非常详细,需要的朋友... 目录一、问题描述示例二、解法一:将字母数字连接到新的 string思路代码实现代码解释复杂度分析三、

mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespace id不一致处理

《mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespaceid不一致处理》文章描述了公司服务器断电后数据库故障的过程,作者通过查看错误日志、重新初始化数据目录、恢复备... 周末突然接到一位一年多没联系的妹妹打来电话,“刘哥,快来救救我”,我脑海瞬间冒出妙瓦底,电信火苲马扁.