分析:
不能用scanf(“%s”),因为碰到空格或者Tab就会停下来。

解决输入中有空格

方法一:使用fgetc(fin),读取一个打开的文件fin,读取一个字符,然后返回一个int值,当文件结束,返回特殊标记EOF(int型的)。
(使用fgetc(fin)可以从打开的文件fin中读取一个字符,一般情况下,应当在检查它不是EOF后再将其转化成为char值。从标准输入读取一个字符可以用getchar(),等价于fgetc(sdin))。
方法二:使用fgets(buf,MAXN,fin)读取完整的一行,其中buf声明为char buf[MAXN]。这个函数读取不超过MAXN-1个字符,然后在末尾添上结束符‘\0’,因此不会出现越界情况。一旦读到回车'\n',读取工作会停止。并将'\n'作为最后一个有效字符。

解决判断时候忽略标点,输出却要保持原样。

分析:不能直接删除,不然不能输出。
预处理:构造新的字符串,不包含原来的标点符号,而且所有字符变成大写
n=strlen(buf);
m=0;
for(i=0;i<len;i++){if(isalpah(buf[i]))s[m++]=toupper(buf[i]);}
Note:使用了ctype.h中的isalpha(c)函数,用于判断字符是否是大写或者小写,用toupper(c)返回c的大写形式。
这样处理以后buf保存的就是原字符串中的所有字母了。(符号被删去)
isalpha,isdigit,isprint

枚举回文串的起点和终点

max记录最长回文子串的长度。如果串s的第i个字符到第j个字符是回文串,检查长度j-i+1是否超过max。

//----------------------------------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include<time.h>
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define MAXN 5000 + 10
char buf[MAXN], s[MAXN];
int p[MAXN];
int main(){
        int i,j,k,n,m=0,max=0,x=0,y=0;
       fgets(buf,MAXN,stdin);
       n=strlen(buf);
        //预??处?|理???
        for(i=0;i<n;i++)
       {
               if(isalpha(buf[i]))
              {
                     p[m]=i;
                     s[m++]=toupper(buf[i]);
              }
       }
 
        for(i=0;i<m;i++)
       {
               for(j=i;j<m;j++)
              {
                      //判D断?i到??j是??不?是??回?文?
                      int ok=1;
                      for(k=i;k<j;k++)
                     {
                            if(s[k]!=s[j+i-k]){ok=0;break ;}
                     }
                      if(ok && max<j-i+1)
                     {
                           max=j-i+1;
                           x=p[i];
                           y=p[j];
                     }
              }
       }
        for(i=x;i<y;i++)
              printf"%c",buf[i]);
       printf"Time used=%.21f\n",(double )clock()/CLOCKS_PER_SEC);
}
 

[code]最长回文子串的更多相关文章

  1. lintcode最长回文子串(Manacher算法)

    题目来自lintcode, 链接:http://www.lintcode.com/zh-cn/problem/longest-palindromic-substring/ 最长回文子串 给出一个字符串 ...

  2. 后缀数组 - 求最长回文子串 + 模板题 --- ural 1297

    1297. Palindrome Time Limit: 1.0 secondMemory Limit: 16 MB The “U.S. Robots” HQ has just received a ...

  3. lintcode :Longest Palindromic Substring 最长回文子串

    题目 最长回文子串 给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串. 样例 给出字符串 "abcdzdcab",它的最长回文 ...

  4. POJ 3974 Palindrome(最长回文子串)

    题目链接:http://poj.org/problem?id=3974 题意:求一给定字符串最长回文子串的长度 思路:直接套模板manacher算法 code: #include <cstdio ...

  5. HDU 3068 最长回文 【最长回文子串】

    和上一题一样,不过这题只是要求最长回文子串的长度 在此采用了非常好用的Manacher算法 据说还是O(n) 的效率QAQ 详细用法参考了上篇博客的参考资料,这两天有空学习一下~ Source cod ...

  6. Ural 1297 Palindrome 【最长回文子串】

    最长回文子串 相关资料: 1.暴力法 2.动态规划 3.中心扩展 4.Manacher法 http://blog.csdn.net/ywhorizen/article/details/6629268 ...

  7. [leetcode]5. Longest Palindromic Substring最长回文子串

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  8. Manacher 求最长回文子串算法

    Manacher算法,是由一个叫Manacher的人在1975年发明的,可以在$O(n)$的时间复杂度里求出一个字符串中的最长回文子串. 例如这两个回文串“level”.“noon”,Manacher ...

  9. 最长回文子串-LeetCode 5 Longest Palindromic Substring

    题目描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...

随机推荐

  1. Jmeter组件介绍

    测试计划:一次性能测试的相关功能用例集. 测试计划--线程组添加:

  2. 解决 GoogleApi 无法访问的问题

    因为 google 被天朝屏蔽,所以很多运用了 fonts.googleapis 的网站都打开很慢,会直到加载 fonts.googleapis 超时才能打开网页. 在本地开发时,可以引用国内的CDN ...

  3. PHP全角半角转换函数

    之前试过网上找的通过ASCII之类的字符替换,发现很多莫名其妙的问题.最后还是换成下面的字符替换方式了,把目前能找到的所有全角都列出来了一个个替换吧 /** * 全角字符转换为半角 * * @para ...

  4. 第八十五节,css布局补充一

    css布局补充一 图片边框问题 注意css布局时img图片标签默认有的浏览器有边框,所以大多时候需要去除图片的边框 CSS各种居中方法 水平居中的text-align:center 和 margin: ...

  5. 大数据时代之hadoop(二):hadoop脚本解析

    “兵马未动,粮草先行”,要想深入的了解hadoop,我觉得启动或停止hadoop的脚本是必须要先了解的.说到底,hadoop就是一个分布式存储和计算框架,但是这个分布式环境是如何启动,管理的呢,我就带 ...

  6. Animate.css让添加CSS动画像喝水一样容易

    在这个年代,你要是不懂一点点css3的知识,你都不好意思说你是个美工.美你妹啊,请叫我前端工程师好不好.呃..好吧,攻城尸...呵呵,作为一个攻城尸,没有点高端大气上档次的东西怎么能行呢,那么css3 ...

  7. git 和 svn

    GIT和SVN之间的五个基本区别 如果你在读这篇文章,说明你跟大多数开发者一样对GIT感兴趣,如果你还没有机会来试一试GIT,我想现在你就要了解它了. GIT不仅仅是个版本控制系统,它也是个内容管理系 ...

  8. ubuntu 调试库

    .安装带有调试信息的libc: sudo apt-get install libc6-dbg .下载libc源码 a.选定一个放置源码的目录并进入,如 /home/kent/dev-os/libc6- ...

  9. 一把刀系统维护工具箱 v1.6 绿色版

    软件名称: 一把刀系统维护工具箱 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win8 / Win7 / Vista / WinXP 软件大小: 13.7MB 图片预览: 软件简介: 一把 ...

  10. ****ural 1141. RSA Attack(RSA加密,扩展欧几里得算法)

    1141. RSA Attack Time limit: 1.0 secondMemory limit: 64 MB The RSA problem is the following: given a ...