HDU5442(字符串的最大表示法或者后缀数组)

2023-12-27 02:38

本文主要是介绍HDU5442(字符串的最大表示法或者后缀数组),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目网址 https://cn.vjudge.net/problem/HDU-5442

 字符串的最大表示法 https://wenku.baidu.com/view/b0ef1be7a6c30c2258019ede.html ,这个博客里面代码https://blog.csdn.net/zy691357966/article/details/39854359

字符串的最大表示:

题解方法转自https://www.cnblogs.com/julyed/p/4812996.html

 

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <map>
#include <string>
#include <cstdio>
#include <cmath>
using namespace std;int getmx(string a,int n,int f)
{int len = a.size();int i=0,j=1,k = 0;while(i<len&&j<len){k = 0;while(a[i+k]==a[j+k]&&k<n) k++;if(k==n){if(!f)return min(i,j);else  //当翻转时,应该返回下标最大值,这样才对应坐标最小值{//cout<<" i="<<i<<" j="<<j<<endl;int d = abs(i-j);//前缀与后缀相同长度return n - d + min(i,j); //取满足要求的最后面位置,即重复后缀的开始位置}}if(a[i+k]<a[j+k])i = max(i+k+1,j+1);elsej = max(j+k+1,i+1);}return min(i,j);
}
int main()
{string a;string b;int T;cin>>T;while(T--){int n;cin>>n;cin>>a;int len = a.size();for(int i=0; i<len; i++)a += a[i];b = a;int ans1 = getmx(a,n,0);reverse(a.begin(),a.end());int ans2 = getmx(a,n,1);string aa = b.substr(ans1,n);string bb = a.substr(ans2,n);//cout<<aa<<" "<<bb<<endl;//  cout<<ans1<<" "<<ans2<<endl;ans2 = n - ans2 - 1;ans1++;ans2++;if(aa>bb)printf("%d 0\n",ans1);else if(bb>aa)printf("%d 1\n",ans2);else{if(ans1<=ans2)printf("%d 0\n",ans1);elseprintf("%d 1\n",ans2);}}return 0;
}

 

这篇关于HDU5442(字符串的最大表示法或者后缀数组)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

golang float和科学计数法转字符串的实现方式

《golangfloat和科学计数法转字符串的实现方式》:本文主要介绍golangfloat和科学计数法转字符串的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望... 目录golang float和科学计数法转字符串需要对float转字符串做处理总结golang float

Python如何判断字符串中是否包含特殊字符并替换

《Python如何判断字符串中是否包含特殊字符并替换》这篇文章主要为大家详细介绍了如何使用Python实现判断字符串中是否包含特殊字符并使用空字符串替换掉,文中的示例代码讲解详细,感兴趣的小伙伴可以了... 目录python判断字符串中是否包含特殊字符方法一:使用正则表达式方法二:手动检查特定字符Pytho

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

MySQL 字符串截取函数及用法详解

《MySQL字符串截取函数及用法详解》在MySQL中,字符串截取是常见的操作,主要用于从字符串中提取特定部分,MySQL提供了多种函数来实现这一功能,包括LEFT()、RIGHT()、SUBST... 目录mysql 字符串截取函数详解RIGHT(str, length):从右侧截取指定长度的字符SUBST