[刷题] PTA 7-64 最长对称子串
7-64 最长对称子串
我的代码:
1 #include<stdio.h>
2 #include<string.h>
3 #define N 1001
4
5 int main() {
6 char str[N];
7 int len;
8 gets(str);
9 len=strlen(str);
10 int i=0,j=0,sys=0,lng=1,temp=0;
11 for(i=2; i<len; i++) {
12 if(sys==0) {
13 j=i-2;
14 if(str[j]==str[i]) {
15 sys=1;temp=3;j--;
16 if(j<0) sys=0;
17 }
18 } else {
19 if(str[j]==str[i] && j>=0) {
20 temp+=2;j--;
21 } else {
22 sys=0;
23 }
24 }
25 if(temp>lng) lng=temp;
26 }
27 sys=0;temp=0;
28 for(i=1; i<len; i++) {
29 if(sys==0) {
30 j=i-1;
31 if(str[j]==str[i]) {
32 sys=1;temp=2;j--;
33 if(j<0) sys=0;
34 }
35 } else {
36 if(str[j]==str[i] && j>=0) {
37 temp+=2;j--;
38 } else {
39 sys=0;
40 }
41 }
42 if(temp>lng) lng=temp;
43 }
44 printf("%d",lng);
45 }
(一个用例通不过)
思考过程:
数组存储字符串,指针i从头遍历
str[i-2]==str[i],若相等则记录对称串的长度,同时指针j从i-2开始向后遍历
两个指针所指内容不相等时停止遍历,更新对称串的长度
奇数情况
变量:
字符数组str
指针i、j
状态变量sys——当前对称串是否在增长
temp——当前对称串长度
lng——当前最长对称串长度
细节:
i从2开始遍历,按照sys的状态分两种情况
若sys==1,判断str[i]==str[j],若是则temp+=2,j--;
若否或j<0则sys=0,跳出 15
若sys==0,判断str[i]==str[i-2],若是则sys=1,j-- 16
更新lng
边界:
调试:
a 1
aba 3
abcba 5
ababa 5
a a 3
偶数情况
奇偶切换
性能优化
大神的代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
char str[1010];
gets(str);
int maxn=0,tmp;
int len = strlen(str);
string str;
getline(cin,str);
int len = str.length();
for(int i=0;i<len;i++)
{
tmp = 1;//奇数时的情况,tmp不同呀!!!
for(int j=1;j<=len;j++)
{
if(i-j<0 || i+j>=len || str[i-j]!=str[i+j])
break;//不满足条件了,就跳过,此时的tmp就是i中最长字符串
tmp += 2;
}
maxn = max(maxn,tmp);
tmp = 0;//偶数时的情况
for(int j=1;j<=len;j++)
{
if(i+1-j<0 || i+j>=len || str[i-j+1]!=str[i+j])
break;
tmp += 2;
}
maxn = max(maxn,tmp);
}
cout << maxn << endl;
return 0;
}
差距:
1、过于侧重从流程层面思考问题,而不是从逻辑层面思考问题
[刷题] PTA 7-64 最长对称子串的更多相关文章
- [刷题] PTA 7-61 找最长的字符串
程序: 1 #include<stdio.h> 2 #include<string.h> 3 #define N 81 4 5 int main() { 6 char ch[N ...
- leecode刷题(19)-- 最长公共前缀
leecode刷题(19)-- 最长公共前缀 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: [&quo ...
- L2-008. 最长对称子串(思维题)*
L2-008. 最长对称子串 参考博客 #include <iostream> using namespace std; int main() { string s; getline(ci ...
- 团体程序设计天梯赛-练习集L2-008. 最长对称子串
L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对给定的字符串,本题要求你输出最长对称子串的长度. ...
- pat 团体赛练习题集 L2-008. 最长对称子串
对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s&quo ...
- L2-008. 最长对称子串
L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对给定的字符串,本题要求你输出最长对称子串的长度. ...
- 天梯杯 L2-008. 最长对称子串
L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对给定的字符串,本题要求你输出最长对称子串的长度. ...
- c语言:最长对称子串(3种解决方案)
问题描述: 输入一个字符串,输出该字符串中最大对称子串的长度.例如输入字符串:“avvbeeb”,该字符串中最长的子字符串是“beeb”,长度为4,因而输出为4. 解决方法:中序遍历 一,全遍历的方法 ...
- L2-008 最长对称子串 (25 分) (模拟)
链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805067704549376 题目: 对给定的字符串,本题要求你输出 ...
随机推荐
- ionic3 清除navpush的堆栈 (android真机返回键bug)
清除navpush的堆栈可以使用 方法一:ionic3文档 this.navCtrl.popToRoot(); //直接返回根组件 方法二: push 后再删除之前页面即可. this.navCtrl ...
- 锋利的NodeJS之NodeJS多线程
最近刚好有朋友在问Node.js多线程的问题,我总结了一下,可以考虑使用源码包里面的worker_threads或者第三方的模块来实现. 首先明确一下多线程在Node.js中的概念,然后在聊聊work ...
- python基础(十一):集合的使用(下)
add() 含义:向集合中添加指定的元素: # 注:重复元素没办法加入. >>> s = {1,2,3} >>> s.add(2) >>> s{1 ...
- 对不起,“下一代ERP”仍旧是现在的ERP
最近数字化转型太火了,到处都是相关数字化的网文.很多人又说在数字化转型时代,ERP早就落伍了云云,取而代之的是什么"下一代ERP",叫什么"ARP"." ...
- 华中科大MOOC 操作系统原理讨论题
1没有安装操作系统的计算机启动过程和结果? 启动会比较快,但功能很局限,无法使用常见的软件应用,对于普通用户来说,功能很局限,对于专业工程师来说,想使用没有操作系统的计算机也有难度.启动后进入 BIO ...
- Java 基础 一文搞懂泛型
本文将从以下四个方面来系统的讲解一下泛型,基本上涵盖了泛型的主体内容. 什么是泛型? 为什么要使用泛型? 如何使用泛型? 泛型的特性 1. 什么是泛型? 泛型的英文是Generics,是指在定义方法. ...
- java面试一日一题:讲下mysql中的索引
问题:请讲下mysql中的索引 分析:mysql中有很多索引,要对对这些索引有所掌握,还要弄清楚每种索引的本质? 回答要点: 主要从以下几点去考虑 1.索引的本质是什么 2.mysql的索引分类: 3 ...
- Python学习笔记-StatsModels 统计回归(1)线性回归
1.背景知识 1.1 插值.拟合.回归和预测 插值.拟合.回归和预测,都是数学建模中经常提到的概念,而且经常会被混为一谈. 插值,是在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数 ...
- 常用的STL
map 容器和数组一样,不过比较活用,相当于直接离散化数组 map<int ,int>mp 一维int map<string ,string>mp 一维 str ma ...
- hdu 5059 判断数字表示方式以及范围合法(int型之内)
题意: 给你一个串和两个整数a,b,问你这个串表示的数字是否合法,并且在a,b之间, 和法的要求是无论是正数还是负数都没有前导0,并且注意 -0 是不合法的. 思路: 写了将近 ...