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 最长对称子串的更多相关文章

  1. [刷题] PTA 7-61 找最长的字符串

    程序: 1 #include<stdio.h> 2 #include<string.h> 3 #define N 81 4 5 int main() { 6 char ch[N ...

  2. leecode刷题(19)-- 最长公共前缀

    leecode刷题(19)-- 最长公共前缀 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: [&quo ...

  3. L2-008. 最长对称子串(思维题)*

    L2-008. 最长对称子串 参考博客 #include <iostream> using namespace std; int main() { string s; getline(ci ...

  4. 团体程序设计天梯赛-练习集L2-008. 最长对称子串

    L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对给定的字符串,本题要求你输出最长对称子串的长度. ...

  5. pat 团体赛练习题集 L2-008. 最长对称子串

    对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s&quo ...

  6. L2-008. 最长对称子串

    L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对给定的字符串,本题要求你输出最长对称子串的长度. ...

  7. 天梯杯 L2-008. 最长对称子串

    L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对给定的字符串,本题要求你输出最长对称子串的长度. ...

  8. c语言:最长对称子串(3种解决方案)

    问题描述: 输入一个字符串,输出该字符串中最大对称子串的长度.例如输入字符串:“avvbeeb”,该字符串中最长的子字符串是“beeb”,长度为4,因而输出为4. 解决方法:中序遍历 一,全遍历的方法 ...

  9. L2-008 最长对称子串 (25 分) (模拟)

    链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805067704549376 题目: 对给定的字符串,本题要求你输出 ...

随机推荐

  1. 在M1芯片的Mac系统上做.net core开发靠谱吗?

    作为一个7年老.NET程序员,最近几年苹果慢慢接替微软,成为我心中最酷的科技公司. 为什么我会选择Mac os作为我的开发环境? 很多做.net的同学都使用Windows系统作为自己的开发环境,我其实 ...

  2. Java基础回顾_第一部分

    Java基础回顾 基本数据类型 数值类型 什么是字节? 位(bit):是计算机中数据的最小单位 字节(byte):是计算机中数据处理的基本单位,习惯上用大写字母B来表示 1 B = 8 bit 字符: ...

  3. 为了效率,我们可以用的招数 之 strlen

    如果要你写一个计算字符串长度的函数 strlen,应该怎么写?相信你很容易写出如下实现: 1 int strlen_1(const char* str) { 2 int cnt = 0; 3 4 if ...

  4. [状压DP]炮兵阵地

    炮 兵 阵 地 炮兵阵地 炮兵阵地 题目描述 司令部的将军们打算在 N ∗ M N*M N∗M的网格地图上部署他们的炮兵部队.一个 N ∗ M N*M N∗M的地图由 N N N行 M M M列组成, ...

  5. 【图像处理】OpenCV+Python图像处理入门教程(七)图像形态学操作

    图像形态学主要从图像内提取分量信息,该分量信息通常对表达图像的特征具有重要意义.例如,在车牌号码识别中,能够使用形态学计算其重要特征信息,在进行识别时,只需对这些特征信息运算即可.图像形态学在目标视觉 ...

  6. centos 7升级gcc到10.2.0

    安装gcc 由于 Linux 操作系统的自由.开源,在其基础上衍生出了很多不同的 Linux 操作系统,如 CentOS.Ubuntu.Debian 等.这些 Linux 发行版中,大多数都默认装有 ...

  7. 201871030135-姚辉 实验二 个人项目—《D{0-1} KP》项目报告

    项目 内容 课程班级博客链接 课程班级博客链接 这个作业要求链接 这个作业要求链接 我的课程学习目标 (1)掌握软件项目个人开发流程.(2)掌握Github发布软件项目的操作方法. 这个作业在哪些方面 ...

  8. OO第四单元总结暨期末总结

    OO第四单元总结暨期末总结 目录 OO第四单元总结暨期末总结 第四单元三次作业架构与迭代 整体感受 HW1 HW2 HW3 四个单元架构设计与方法演进 Unit1 Unit2 Unit3 Unit4 ...

  9. php-mysql-防止sql注入

    1.防止sql注入-预准备 mysqli: $qSelect = $DBH->prepare("SELECT * FROM users WHERE username = ?" ...

  10. CrackMe_002

    老规矩,先熟悉程序. 只有一个验证的功能,错误提示You Get ... 关闭没有nag窗口 第一种,暴力破解 查找字符串,很少,直接双击进入 可以看到错误提示的跳转来自: 表示这应该是个重要的跳转, ...