L2-008. 最长对称子串

时间限制
100 ms

内存限制
65536 kB

代码长度限制
8000 B

判题程序
Standard

作者
陈越

对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s",于是你应该输出11。

输入格式:

输入在一行中给出长度不超过1000的非空字符串。

输出格式:

在一行中输出最长对称子串的长度。

输入样例:

Is PAT&TAP symmetric?

输出样例:

11

以i下标为遍历字符串的坐标,左右展开,j为当前遍历的长度。

每次从i开始,要依次判断奇数偶数的情况,取最大值,注意偶数的时候以左边为基准和以右边为基准都可以,关键要在比较的时候控制好。

还有注意左边界是0,右边界是len-1,所以到len就要break

时间复杂度为O(n*2)级,比我开始无脑用Java写的n*3还是好多了,而且n*3会超时。。。

还有一个回文串算法也可以解决。。

#include <bits/stdc++.h>#define INF 0x3fffffff
#define eps 1e-8typedef long long LL;
const double pi = acos(-1.0);
const int mod = 1e9 + 7;
const int maxn = 70;
using namespace std;int main() {string str;getline(cin,str);int len = str.length();int Max = -1;for(int i = 0; i < len; i++) {//奇数情况int ans = 1;for(int j = 1; j < len; j++) {if(i-j<0 || i-j >= len || str[i-j]!= str[i+j])break;//跳到下一个下标ans+=2;}//每一次下标都取一次最值Max = Max<ans?ans:Max;//偶数情况ans = 0;for(int j = 1; j < len; j++) {
//                if(i-j+1<0 || i+j>=len ||str[i+1-j] != str[i+j])//偶数以对称点左边的数为基准if(i-j<0 || i-1+j>=len ||str[i-j] != str[i-1+j])//偶数以对称点右边的数为基准break;ans+=2;}Max = Max<ans?ans:Max;}cout<<Max<<endl;return 0;
}

超时Java,随便伸手写的

import java.util.Scanner;class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String str = new String();str = sc.nextLine();int sum = 0;int Max = -1;for(int i = 0; i < str.length(); i++)for(int j = str.length() - 1; j >= 0&&j >= i; j-- ) {if(str.charAt(i) == str.charAt(j)){while(i!=j&&j>=i) {sum++;i++;j--;if(str.charAt(i) == str.charAt(j)&&j>i)continue;else {if(sum > Max) {Max = sum;sum = 0;break;}}}}}if(Max == 1)System.out.println(1);elseSystem.out.println(Max*2+1);}
}

转载于:https://www.cnblogs.com/zhangmingzhao/p/7256656.html

L2-008 最长对称字串 以下标i展开相关推荐

  1. 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串

    1. 最长回文串 一般用后缀数组或者后缀树可以解决, 用此方法:http://blog.csdn.net/v_july_v/article/details/6897097 预处理后缀树,使得查询LCA ...

  2. 最长公共子序列(LCS)问题 Longest Common Subsequence 与最长公告字串 longest common substr...

    问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y=& ...

  3. 求两个字符串的最长公共字串(连续)

    题目描述: 输入两个字符串,求其的最长的公共的字串,这与最长公共子序列不一样 输出两字符串的最长公共字串 思路一: 从字符串A开始遍历,同时遍历字符串A,找到第一个与当前字符串A相同的字符,此时记下当 ...

  4. 后缀数组以及利用后缀数组求取最长公共字串

    后缀树组是一个字符串的所有后缀的排序数组.后缀是指从某个位置 i 开始到整个串末尾结束的一个子串.字符串 r 的从 第 i 个字符开始的后缀表示为 Suffix(i) ,也就是Suffix(i)=r[ ...

  5. 最字头之二:最长公共字串

    除代码外,其他文字部分均为直接转载.代码为参考. 文章作者: Yx.Ac   文章来源: 勇幸|Thinking ( http://www.ahathinking.com)   转载请注明,谢谢合作. ...

  6. 最长递增字串的三种做法

    感谢博主:http://qiemengdao.iteye.com/blog/1660229 对于博主的第一种做法,最后还是要转到DP上来, 所以我觉得只是算是用求最大公共子序列的算法的强加应用,并没有 ...

  7. 最长公共字串(LCS)C++代码(动态规划实现)

    时间复杂度:O(n1)*O(n2),n1和n2为两个字符串的长度 注释掉#define TEST取消随机输入模式 #define TEST #include<ctime> #include ...

  8. LeetCode中等题之无重复字符的最长字串

    题目 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 &q ...

  9. 查找一段文字中最长的重复字串 – 编程珠玑(排过序的后缀数组的应用)

    转自:https://www.cse.msu.edu/~liyang5/?p=53 <编程珠玑>在第15章"珍珠字符串"一节,给出了一个非常漂亮的实现 – 基于目标字符 ...

最新文章

  1. archlinux mariadb躺坑
  2. JAVA 条件语句 跟PHP没有区别!!!!!
  3. 精度,精确率,召回率_了解并记住精度和召回率
  4. geojson地图_Geojson地图pandas数据帧
  5. wordpress主题-一款功能强大的综合类型wordpress模板
  6. gitter 卸载_最佳Gitter渠道:PHP
  7. vscode如何添加头部注释、作者注释
  8. 纹理窗口Qt+OpenGL之纹理贴图
  9. 小程序-读取视频数据 每个N帧采样保存
  10. Facebook 游戏开发更新文档 API 参考文档 v5.0
  11. lamp+cacti+ntop+thold+nagios+syslog
  12. python 代码生成器_Python代码生成器(代码生成工具)V1.1 正式版
  13. PowerDesigner 15 License Key失效的解决方案
  14. 对缓存投毒的学习总结
  15. 双路服务器56核系统推荐,双路最高支持56核112线程!华硕妖板羡煞旁人
  16. 深度学习方法的超分辨率(Super-resolution)方向论文【不定期更新】
  17. js把汉字转换成拼音
  18. sever and mirroring(服务器和镜像)是什么
  19. python 证书-在python使用SSL(HTTPS)
  20. C++ primer读书记录包括第一部分和第二部分 第二十二次更新2021.9.10

热门文章

  1. 嵌入式相关的硬件平台
  2. 在Ubuntu下用桌面图形界面挂载分区
  3. java 面试代码_java代码编写及面试题
  4. C/C++获取二维数组行列数
  5. xpath的基本使用
  6. python数据结构-如何统计序列中元素的频度
  7. solution for python can not import local module
  8. jmeter模拟登陆
  9. Nikitosh 和异或 —— 一道 trie 树的题用可持久化 trie 水 然后翻车了...
  10. css 改变输入框光标颜色