7-64 最长对称子串

我的代码:

  1. 1 #include<stdio.h>
  2. 2 #include<string.h>
  3. 3 #define N 1001
  4. 4
  5. 5 int main() {
  6. 6 char str[N];
  7. 7 int len;
  8. 8 gets(str);
  9. 9 len=strlen(str);
  10. 10 int i=0,j=0,sys=0,lng=1,temp=0;
  11. 11 for(i=2; i<len; i++) {
  12. 12 if(sys==0) {
  13. 13 j=i-2;
  14. 14 if(str[j]==str[i]) {
  15. 15 sys=1;temp=3;j--;
  16. 16 if(j<0) sys=0;
  17. 17 }
  18. 18 } else {
  19. 19 if(str[j]==str[i] && j>=0) {
  20. 20 temp+=2;j--;
  21. 21 } else {
  22. 22 sys=0;
  23. 23 }
  24. 24 }
  25. 25 if(temp>lng) lng=temp;
  26. 26 }
  27. 27 sys=0;temp=0;
  28. 28 for(i=1; i<len; i++) {
  29. 29 if(sys==0) {
  30. 30 j=i-1;
  31. 31 if(str[j]==str[i]) {
  32. 32 sys=1;temp=2;j--;
  33. 33 if(j<0) sys=0;
  34. 34 }
  35. 35 } else {
  36. 36 if(str[j]==str[i] && j>=0) {
  37. 37 temp+=2;j--;
  38. 38 } else {
  39. 39 sys=0;
  40. 40 }
  41. 41 }
  42. 42 if(temp>lng) lng=temp;
  43. 43 }
  44. 44 printf("%d",lng);
  45. 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

偶数情况

奇偶切换

性能优化

大神的代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<string>
  6. using namespace std;
  7. int main()
  8. {
  9. char str[1010];
  10. gets(str);
  11. int maxn=0,tmp;
  12. int len = strlen(str);
  13. string str;
  14. getline(cin,str);
  15. int len = str.length();
  16. for(int i=0;i<len;i++)
  17. {
  18. tmp = 1;//奇数时的情况,tmp不同呀!!!
  19. for(int j=1;j<=len;j++)
  20. {
  21. if(i-j<0 || i+j>=len || str[i-j]!=str[i+j])
  22. break;//不满足条件了,就跳过,此时的tmp就是i中最长字符串
  23. tmp += 2;
  24. }
  25. maxn = max(maxn,tmp);
  26. tmp = 0;//偶数时的情况
  27. for(int j=1;j<=len;j++)
  28. {
  29. if(i+1-j<0 || i+j>=len || str[i-j+1]!=str[i+j])
  30. break;
  31. tmp += 2;
  32. }
  33. maxn = max(maxn,tmp);
  34. }
  35. cout << maxn << endl;
  36. return 0;
  37. }

差距:

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. SpringBoot-08 SpringSecurity

    SpringBoot-08 SpringSecurity 创建了一个新项目,创建时选择导入starter-web 1.环境搭建 1.1 导入thymeleaf <dependency> & ...

  2. $@ 与 $* 差在哪?-- Shell十三问<第九问>

    $@ 与 $* 差在哪?-- Shell十三问<第九问> 要说 $@ 与 $* 之前,需得先从 shell script 的 positional parameter 谈起.我们都已经知道 ...

  3. [Fundamental of Power Electronics]-PART I-4.开关实现-0 序

    4 开关实现 在前面的章节中我们已经看到,可以使用晶体管,二极管来作为Buck,Boost和其他一些DC-DC变换器的开关元件.也许有人会想为什么会这样,以及通常如何实现半导体的开关.这些都是值得被提 ...

  4. [源码解析] 并行分布式任务队列 Celery 之 多进程模型

    [源码解析] 并行分布式任务队列 Celery 之 多进程模型 目录 [源码解析] 并行分布式任务队列 Celery 之 多进程模型 0x00 摘要 0x01 Consumer 组件 Pool boo ...

  5. Java(299-314)【线程、同步】

    1.多线程的原理 2.多线程内存图解 开辟新的栈空间,多个线程之间互不影响 3.Thread类的常用方法 getName()返回该线程的名称 Thread类的子类 获取线程的名称:     1.使用T ...

  6. 黑马架构师v2.5.1 (codeUtil)使用注意事项

    资源 1.资料里的codeutil软件有问题,使用时部分类和接口文件名后有一串日期数字等.码云的没问题 2.生成代码后zookeeper的IP改为本机的

  7. IDEA下 Scala 安装 使用

    Scala 安装 使用 1.安装Scala插件 Setting--->Plugins--->搜索Scala--->install--->安装完成 或者线上安装不成功/网速太慢, ...

  8. [ERROR]: gitstatus failed to initialize.

    1 问题描述 Manjaro升级后,zsh的主题p10k出现的问题. Your git prompt may disappear or become slow. Run the following c ...

  9. Linux执行.sh文件,提示No such file or directory的问题

    问题描述 在window平台下,写好shell脚本文件,迁移到linux平台,赋过可执行权限,执行该sh文件,却提示NO such file or directory 解决方案 难道是文件格式兼容性问 ...

  10. 算法、数据结构、与设计模式等在游戏开发中的运用 (一):单例设计(Singleton Design)

    算法.数据结构.与设计模式等在游戏开发中的运用 (一):单例设计(Singleton Design) 作者: Compasslg 李涵威 1. 什么是单例设计(Singleton Design) 在学 ...