[刷题] 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 题目: 对给定的字符串,本题要求你输出 ...
随机推荐
- 小白都能学会的Java注解与反射机制
前言 Java注解和反射是很基础的Java知识了,为何还要讲它呢?因为我在面试应聘者的过程中,发现不少面试者很少使用过注解和反射,甚至有人只能说出@Override这一个注解.我建议大家还是尽量能在开 ...
- [hash-bfs]USACO 3.2 Magic Squares 魔板
魔 板 魔板 魔板 题目描述 在成功地发明了魔方之后,拉比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 我们知道魔板的每一个方格都有一种颜色 ...
- 专家动态页面的实现——php基于CI框架的学习(二)
以下是本次学习的页面 打开相关文件,整个定义了一个Expert类 class Expert extends CI_Controller{} 在Expert类里定义了几个参数以及说明其使用了哪些mode ...
- Class类文件结构--访问标志
访问标志的位置:在常量池结束之后的两个字节(16位)表示访问标志access_flags. 访问标志的作用:用于标识类或者接口层次的访问信息:比如该Class是类还是接口,是否为public类型.是否 ...
- 广告成本控制-PID算法
今天我们来聊聊广告成本控制中常用的PID算法. 0.PID算法简介 首先我们可以看下维基百科中给PID算法的定义:由比例单元(Proportional).积分单元(Integral)和微分单元(Der ...
- 后端Spring Boot+前端Android交互+MySQL增删查改
2021.1.27 更新 已更新新版本博客,更新内容很多,因此新开了一篇博客,戳这里. 1 概述 使用spring boot作为后端框架与Android端配合mysql进行基本的交互,包含了最基本的增 ...
- Manjaro 蓝牙连接问题
1 问题描述 蓝牙不能连接,或者连接上了没有声音. 2 解决方案 首先确保相应软件包存在: sudo pacman -S bluez bluez-utils pulseaudio-bluetooth ...
- 13. VUE 组件之间数据传递
组件数据传递: 父组件向内传递属性---动态属性 子组件向外发布事件 solt 插槽传递模板---具名solt 1. 父组件向子组件传递数据 子组件在父组件的并作为标签引入,通过设置标签的属性传递数据 ...
- Day08_40_集合_List
List集合 List接口是继承Collection接口,所以Collection集合中有的方法,List集合也会继承过来,可以直接使用. All Superinterfaces: Collectio ...
- 面试有关TCP常问的几个问题
在面试中网络问题是一定会考察的,而TCP协议则是考察网络知识的重点.经常会被问道的问题如下: 请讲一下TCP协议建立连接的过程 请介绍TCP协议中的三次握手和四次挥手是怎么样的 为什么TCP协议要三次 ...