L2-008 最长对称字串 以下标i展开
L2-008. 最长对称子串
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定"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展开相关推荐
- 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串
1. 最长回文串 一般用后缀数组或者后缀树可以解决, 用此方法:http://blog.csdn.net/v_july_v/article/details/6897097 预处理后缀树,使得查询LCA ...
- 最长公共子序列(LCS)问题 Longest Common Subsequence 与最长公告字串 longest common substr...
问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y=& ...
- 求两个字符串的最长公共字串(连续)
题目描述: 输入两个字符串,求其的最长的公共的字串,这与最长公共子序列不一样 输出两字符串的最长公共字串 思路一: 从字符串A开始遍历,同时遍历字符串A,找到第一个与当前字符串A相同的字符,此时记下当 ...
- 后缀数组以及利用后缀数组求取最长公共字串
后缀树组是一个字符串的所有后缀的排序数组.后缀是指从某个位置 i 开始到整个串末尾结束的一个子串.字符串 r 的从 第 i 个字符开始的后缀表示为 Suffix(i) ,也就是Suffix(i)=r[ ...
- 最字头之二:最长公共字串
除代码外,其他文字部分均为直接转载.代码为参考. 文章作者: Yx.Ac 文章来源: 勇幸|Thinking ( http://www.ahathinking.com) 转载请注明,谢谢合作. ...
- 最长递增字串的三种做法
感谢博主:http://qiemengdao.iteye.com/blog/1660229 对于博主的第一种做法,最后还是要转到DP上来, 所以我觉得只是算是用求最大公共子序列的算法的强加应用,并没有 ...
- 最长公共字串(LCS)C++代码(动态规划实现)
时间复杂度:O(n1)*O(n2),n1和n2为两个字符串的长度 注释掉#define TEST取消随机输入模式 #define TEST #include<ctime> #include ...
- LeetCode中等题之无重复字符的最长字串
题目 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 &q ...
- 查找一段文字中最长的重复字串 – 编程珠玑(排过序的后缀数组的应用)
转自:https://www.cse.msu.edu/~liyang5/?p=53 <编程珠玑>在第15章"珍珠字符串"一节,给出了一个非常漂亮的实现 – 基于目标字符 ...
最新文章
- archlinux mariadb躺坑
- JAVA 条件语句 跟PHP没有区别!!!!!
- 精度,精确率,召回率_了解并记住精度和召回率
- geojson地图_Geojson地图pandas数据帧
- wordpress主题-一款功能强大的综合类型wordpress模板
- gitter 卸载_最佳Gitter渠道:PHP
- vscode如何添加头部注释、作者注释
- 纹理窗口Qt+OpenGL之纹理贴图
- 小程序-读取视频数据 每个N帧采样保存
- Facebook 游戏开发更新文档 API 参考文档 v5.0
- lamp+cacti+ntop+thold+nagios+syslog
- python 代码生成器_Python代码生成器(代码生成工具)V1.1 正式版
- PowerDesigner 15 License Key失效的解决方案
- 对缓存投毒的学习总结
- 双路服务器56核系统推荐,双路最高支持56核112线程!华硕妖板羡煞旁人
- 深度学习方法的超分辨率(Super-resolution)方向论文【不定期更新】
- js把汉字转换成拼音
- sever and mirroring(服务器和镜像)是什么
- python 证书-在python使用SSL(HTTPS)
- C++ primer读书记录包括第一部分和第二部分 第二十二次更新2021.9.10