aba 回文练习 -- 参考罗大神的

经典编程题——回文问题 编程题:回文问题 马上要找工作了,最近一直在刷题,决定吧自己遇到的感觉比较好的题分享在博客里面,大家可以参考参考(其实我也不懂那些题好,那些题不好,哈哈)。 下面是最近做的一道关于回文的笔试题,大家看看: “回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有... 阅读详情
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
#define maxn 1024
#define parr(arr,n) printf(#arr":");for(int kk=0;kk<n;kk++) printf("%d ",arr[kk]);puts("")


int bufa[maxn],bufb[maxn],bufs[maxn],bufv[maxn];
int sa[maxn],rank[maxn],height[maxn];


int cmp(int* src,int a,int b,int l){
return src[a]==src[b]&&src[a+l]==src[b+l];
}
void da(int *src,int sz,int m)
{
int i;
int *x=bufa,*y=bufb,*t;
for(i=0;i<m;i++)     bufs[i]=0;
for(i=0;i<sz;i++)    bufs[x[i]=src[i]]++;
for(i=1;i<m;i++)    bufs[i]+=bufs[i-1];
for(i=sz-1;i>=0;--i) sa[--bufs[src[i]]]=i;


int p,j;
for(j=1,p=1;p<sz;j*=2,m=p)
{
for(p=0,i=sz-j;i<sz;i++) y[p++]=i;
for(i=0;i<sz;i++) if(sa[i]>=j) y[p++]=sa[i]-j;

for(i=0;i<sz;i++) bufv[i]=x[y[i]];
for(i=0;i<m;i++) bufs[i]=0;
for(i=0;i<sz;i++)   bufs[bufv[i]]++;
for(i=1;i<m;i++) bufs[i]+=bufs[i-1];
for(i=sz-1;i>=0;--i) sa[--bufs[bufv[i]]]=y[i];


for(t=x,x=y,y=t,p=1,i=1,x[sa[0]]=0;i<sz;++i)
 x[sa[i]]=cmp(y,sa[i],sa[i-1],j)?p-1:p++;
}
}


void cal_height(int *src, int sz)
{
int i,k,j;
for(i=1;i<sz;++i) rank[sa[i]]=i;
for(k=0,i=0;i<sz;height[rank[i++]]=k)
 for(k?k--:0,j=sa[rank[i]-1];src[i+k]==src[j+k];k++)
;
}


int RMQ[maxn],mm[maxn];
int best[20][maxn];


void initRMQ(int n)
{
int i,j;
for(mm[0]=-1,i=1;i<n;i++)
 mm[i]=(i&(i-1))==0 ? mm[i-1]+1:mm[i-1];
for(i=1;i<n;i++) best[0][i]=i; //i=1
int a,b;
for(i=1;i<=mm[n];i++)
 for(j=1;j<n-(1<<i)+1;j++){ //j=1
a=best[i-1][j];
b=best[i-1][j+(1<<(i-1))];
best[i][j]=RMQ[a]<RMQ[b] ? a:b;
 }
}


int askRMQ(int a,int b)
{
int t;
t=mm[b-a+1];
b-=((1<<t)-1);
a=best[t][a];
b=best[t][b];
return RMQ[a]<RMQ[b] ? a:b;
}


int lcp(int a,int b)
{
a=rank[a];
b=rank[b];
if(a>b) {int t=a;a=b;b=t;}
return height[askRMQ(a+1,b)];
}


int main()
{
char src[maxn],c;
int dsrc[maxn],i,len,n;
bzero(src,sizeof(src));
i=0;
while((c=getchar())!='\n') src[i++]=c;
if(c!='\n') while(getchar()!='\n');
len=strlen(src);
for(i=0;i<len;i++) dsrc[i]=src[i];
dsrc[i++]=1;
n=2*len+1;
for(;i<n;i++) dsrc[i]=src[n-i-1];      //abc -- > abc1cba
dsrc[n++]=0;


printf("n=%d\n",n);
parr(dsrc,n);
da(dsrc,n,128);
parr(sa,n);
cal_height(dsrc,n);


for(i=0;i<n;i++) RMQ[i]=height[i];
initRMQ(n);


parr(height,n);
parr(rank,n);


n--;
int ans=0,w,k;
for(i=0;i<len;i++){
k=lcp(i,n-i);
if(2*k>ans) ans=2*k,w=i-k;
k=lcp(i,n-i-1);
if(2*k-1>ans) ans=2*k-1,w=i-k+1;
}
src[w+ans]=0;
printf("%s\n",src+w);
}
【华为OD机试真题 C语言】72、没有回文串 | 机试真题+思路参考+代码解析 现在已经存在一个不包含回文串的字符串,字符串的字符都是在英语字母的前N个,字符串不包含任何长度大于等于2的回文串;第二行输入一个字符串(输入长度 阅读详情

相关推荐

【华为OD机试真题 JS语言】72、没有回文串 | 机试真题+思路参考+代码解析

>回文串的定义:正读和反读都一样的字符串。 >  现在已经存在一个不包含回文串的字符串,字符串的字符都是在英语字母的前N个,字符串不包含任何长度大于等于2的回文串; >  请找出下一个字序的不包含回文串的、字符都是在英语字母的前N个、长度相同的字符串。 如果不存在,请输出NO。

KJ.JK 2435

Python处理字符串中的回文串(“回文串”是一个正读和反读都一样的字符串,比如“level”、“aba”或者“noon”、“aa”等等就是回文串)

#coding:utf-8 def no_abba(str): #破坏回文串使之不能包含回文 strnew ="" for i in range(len(str)): if len(strnew)==0: strnew=str[i] if (len(strnew)==1)and (strnew[-1]!=str[i]): ...

sunkaivg的博客 4500

【华为OD机试真题 C++语言】72、没有回文串 | 机试真题+思路参考+代码解析

回文串的定义:正读和反读都一样的字符串。 >  现在已经存在一个不包含回文串的字符串,字符串的字符都是在英语字母的前N个,字符串不包含任何长度大于等于2的回文串; >  请找出下一个字序的不包含回文串的、字符都是在英语字母的前N个、长度相同的字符串。 如果不存在,请输出NO。

KJ.JK 1245

判断一个链表是否为回文结构思路

回文串为首尾对称的字符串: 如a,aba,abba等 单链表思路 1.将字符读入链表 2.找到链表中点 3.将链表从中点断开成2条,将后半条反转 4.比较两条链表是否相等(比较次数以少的为准(长度为奇数时)) //解法1.数组存储判断一个链表是否为回文链 public class TestHuiWen { static class MyNode{ public int data; public MyNode next; ..

luzhensmart的专栏 266

conda环境的复制、备份操作

请确保将 source_env 替换为你要复制的现有环境的名称,并将 target_env 替换为你要创建的新环境的名称。要备份一个Conda虚拟环境,你需要将环境的配置信息和依赖包列表保存起来,以便在需要的时候能够重新创建相同的环境。要将现有的 conda 环境复制为其他环境,可以使用 conda create 命令并克隆已存在的环境。

Dollhan的博客 3773

chipseeker Y叔

这一次讲解非常重要的peak注释,注释在ChIPseeker里只需要用到一个函数annotatePeak,它可以满足大家各方面的需求。 输入 当然需要我们上次讲到的BED文件,ChIPseeker自带了5个BED文件,用getSampleFiles()可以拿到文件的全路径,它返回的是个named list,我这里取第4个文件来演示。annotatePeak的输入也可以是GRanges对象,你如果用R做peak calling的话,直接就可以衔接上ChIPseeker了。 require(ChIPseeke

生信小博士的博客 1590

12 判断输入的字符串是否为回文串

参考:算法二十五:回文串 回文串:字符串倒序写出来和该字符串相同。比如aba,倒序写出来也是aba,故aba是回文串。而abab不是回文串,因为倒过来写是baba。 编写程序判断输入的字符串是否为回文串。 ...

闲狗的博客 2046

深度学习——VGG16模型详解

1、网络结构 VGG16模型很好的适用于分类和定位任务,其名称来自牛津大学几何组(Visual Geometry Group)的缩写。 根据卷积核的大小核卷积层数,VGG共有6种配置,分别为A、A-LRN、B、C、D、E,其中D和E两种是最为常用的VGG16和VGG19。 介绍结构图: conv3-64 :是指第三层卷积后维度变成64,同样地,conv3-128指的是第三层卷积后维度变成128; input(224x224 RGB image) :指的是输入图片大小为224244的彩色图像,通道为

橙子的博客 12万+

python实现寻找最长回文子串

题目描述 给定一个字符串s,找到 s中最长的回文子串。你可以假设s的最大长度为 1000。 LeetCode原题地址:https://leetcode-cn.com/problems/longest-palindromic-substring/ 测试用例 示例 1 输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。 示例 2 输入: “cbbd” 输出: “bb” 解题代码和思路 遍历所有子串寻找回文子串 class Solution(object):

修炼之路 5444

ROS2零拷贝避坑指南:Fast DDS共享内存配置常见问题与排查方法

本文深入解析ROS2 Humble中Fast DDS的零拷贝机制,提供共享内存配置的常见问题排查方法。从环境变量设置、XML配置文件到运行时诊断工具,全面指导开发者高效实现进程间数据传输优化,避免低效拷贝问题。特别针对/dev/shm无文件生成等典型场景给出解决方案。

weixin_30379531的博客 478

JEDEC 标准半导体功率循环热阻测试(JESD51 系列)

【代码】JEDEC 标准半导体功率循环热阻测试(JESD51 系列)

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 468

回文串,回文数,最长回文子串

文章目录一. 回文串二. 回文数三. 最长回文子串 一. 回文串 判断输入的字符串是否为回文串 Input : a s d f d s a return : true 解题思路: 在此处我想到的是快排的思想: 定义两个标兵,让后让 left 和 right 从字符串两端向中心遍历 如果left和right指向的字符不相等返回false,当left==right时为回文串 public ...

iqqcode 783

订餐平台餐厅信息抓取:使用Python爬虫获取商家信息和用户评价

在这篇博客中,我们展示了如何使用Python爬虫抓取订餐平台上的餐厅信息和用户评价数据。通过使用requests和Selenium,我们能够有效地从静态和动态网页中提取数据,并使用pandas和matplotlib对数据进行存储和分析。未来,您可以根据需求进一步扩展功能,例如增加错误处理、增加抓取多个页面的能力,或者使用高级技术如分布式爬虫来抓取更大规模的数据。

2201_76125261的博客 1651

[力扣] 5.最长回文子串 中等

描述: 给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。 示例: 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 我的解决方案: class Solution { public String longestPalindrome(String s) { if(s==null||s.length()==1){ ...

a_small_Bird233的博客 177

激光打标轴坐标计算分析

‌:基于坐标差的平方和开方运算,勾股定理将几何关系转化为代数计算,从而实现了从坐标到距离的精确转换‌12。直角三角形的应用从上图可以看到A,B,P三个点连起来就是一个直角三角形了。用勾股定理计算距离 C#有相关的方法直接传参数就可以了。很方便。

StevenChen的博客 312

ardupilot 获取避障传感器数据

本节主要记录自己学ardupilot的避障代码过程,首先看下怎么注册避障传感器,然后怎么获取避障数据。

陌城烟雨 5524

回文串系列

目录导言单一回文串最长回文子串中心扩展法动态规划 导言 回文,顾名思义就是正着读倒着读都是一样的,回文字符串系列问题在字符串问题中占了很大的比重,通过回文串可以延伸出很多相类似的题目,会用到不同的算法,各有千秋,例如动态规划、分治、回溯、双指针、递归等算法。下面就从最简单的回文字符串开始一步步深入讨论。 单一回文串 一个最简单的题目就是给出一个字符串,判断是否是回文串,其中这个字符串只包含连续的字...

laoli的博客 1588

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java递归实现回文算法_递归实现回文判断

首先我们要考虑使用递归的2个条件,原问题是否可以分解为形式相同但规模更小的问题,还有就是如果存在这样的分解,那么这种分解是否存在一种简单情境?先来看第一点,是否存在一种符合条件的分解。容易发现,如果一个字符串是回文,那么在它的内部一定存在着更小的回文。 比如level里面的eve也是回文。 而且,我们注意到,一个回文的第一个字符和最后一个字符一定是相同的。所以我们很自然的有这样的方法:先判断给定字...

weixin_39884074的博客 943

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

回文数和回文串:常见操作汇总

【法一】粗暴反转 class Solution { public boolean isPalindrome(int x) { String s1 = Integer.toString(x); StringBuilder sb = new StringBuilder(s1); sb.reverse(); String s2 = sb.toString(); if(s1.equals(s2)){ re

qq_38596491的博客 605

Statistics and Machine Learning Toolbox

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

回文算法一维数组c语言,回文算法

一、回文算法:回文指从左往右和从由往左读到相同内容的文字。比如: aba,abba,level。回文具有对称性。回文算法的目标是把最长的回文从任意长度的文本当中寻找出来。比如:从123levelabc中寻找出level。回文数C语言(Xcode实现)#include #include int IsHuiWenShu( int );int main(int argc, const char * ar...

weixin_27785375的博客 630

动态规划-最长回文子串

最长回文子串

张凡的博客 366

leetcode算法题练习--最长回文子串(c语言)

1、问题描述 Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000. Example 1: Input: “babad” Output: “bab” Note: “aba” is also a valid answer. ...

weixin_38072112的博客 516

Python 最长回文串的三种解法

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 暴力解法 class Solution: def longestPalindrome(self, s): # 暴力解法 n = len(s) # s为空的情况 if n == 0:

寒飞雪的博客 2067

【算法】最长回文子串

题目 回文串(palindromic string)是指这个字符串无论从左读还是从右读,所读的顺序是一样的。简而言之,回文串是左右对称的。所谓最长回文子串问题,是指对于一个给定的母串。从所有的为回文串的子串a, ded, cdedc, bcdecdb中;找出最长的那一个bcdecdb。但是该如何判断子串是否回文然后找出最长者呢? 解答 一、暴力求解(时间复杂度O(n^3)) ...

火山君的博客 433

回文判断 java

题目:给定一个字符串判定这个字符串是不是回文。 分析:回文的意思是,举几个例子“121”,“abba”,"aaaadddd"。回文的意思是左右对称的字符串。 解法一:从两头往中间扫描: 不论是奇数长度的"aba",还是偶数长度的“aabb”,从两头向中间 扫描都是(0,length-1),(1,length-2)这样子的对称的。扫描的终止条件是iO(n),空间复杂度为O(1) 参考代码如下

TJUCoders的博客 574

【动态规划:回文串问题】最长回文子串 && 回文串分割IV

本文介绍了三道回文子串问题的解法:最长回文子串、回文串分割IV。核心思路是利用动态规划预处理字符串,构建二维dp表记录所有子串的回文状态。对于最长回文子串,在遍历dp表时记录最大长度和起始位置;对于回文串分割IV,通过检查所有可能的三段分割组合是否存在全回文情况。两种方法的时间复杂度均为O(n²),空间复杂度O(n²)。文章提供了详细的解题思路和对应代码实现,并强调了处理过程中的边界条件注意事项。

lirendada的博客 1304
上一篇: kmp 练习下
下一篇: k_over 重叠字符串
lsff01
博客等级 码龄14年 4粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值