青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

zoj2744_Palindromes

Posted on 2010-10-13 11:00 李東亮 閱讀(1646) 評論(0)  編輯 收藏 引用

ZOJ 2744 Palindromes

這道題要求出一個長度不大于5000的字符串所有子串中回文字符串的個數(shù)。可以用暴力brute-force方法解決,但是會TLE。上網(wǎng)搜索了一下大家的解決方案,主要有兩種:DP法和分治法。仔細(xì)消化了一下,感覺受益匪淺。

首先說下DP方法,其實(shí)碰到這種具有很多重復(fù)計(jì)算的子問題的問題,很容易想到動態(tài)規(guī)劃DP。對于這個問題可以這樣理解:每次都從下標(biāo)0開始搜索長度依次為23、……、n的子串,長度為1的子串肯定是回文。所以可以設(shè)立數(shù)組bool dp[n][n],其中dp[i][i]=truedp[i][j]表示字符串中從ij的子串是否是回文,這樣對于上面的搜索過程,要判斷str[i-j]要是否回文,可以分為兩種情況:

1.      ij之間沒有其它字符,所以只要str[i]==str[j]即可。

2.      ij之間還有其它的字符,則要求str[i]==str[j]并且dp[i+1][j-1]=true。這也很好理解,從i+1j-1的子串是回文,再兩端加上相同的字符,肯定也是回文。

參考代碼如下:

#include <cstdio>
#include 
<cstdlib>
#include 
<iostream>
#include 
<cstring>
using namespace std;

char s[5001];
bool dp[5001][5001];

int main(void)
{
    
int i, j;
    
int len;
    
int cnt;
    
int k;
    
while(gets(s))
    {
        len 
= strlen(s);
        cnt 
= len;
        
for (i = 0; i < len; ++i)
        {
            dp[i][i] 
= 0;
        }
        
for (i = 1; i < len; ++i)
        {
            
for (j = 0; j < len-i; ++j)
            {
                k 
= i+j;
                dp[j][k] 
= false;
                
if (s[j] == s[k])
                {
                    
if (j+1 < k-1)
                    {
                        
if (dp[j+1][k-1])
                        {
                            dp[j][k] 
= true;
                            
++cnt;
                        }
                    }
                    
else
                    {
                        dp[j][k] 
= true;
                        
++cnt;
                    }
                }
            }
        }
        printf(
"%d\n", cnt);
    }
    
return 0;
}

第二種思路是分治法,對于每個字符可以以它為中心向兩端擴(kuò)展,依次判斷,這樣同樣避免了很多重復(fù)判斷。在擴(kuò)展過程中,如果擴(kuò)展到當(dāng)前情況發(fā)現(xiàn)不是回文,這可以停止擴(kuò)展。

擴(kuò)展時需要分兩種情況:

1.奇數(shù)子串?dāng)U展。例如對于字符串ababa,從a[2]=a開始擴(kuò)展,奇數(shù)擴(kuò)展會考慮a兩邊的b,是回文,繼續(xù)向外擴(kuò)展。

2.偶數(shù)子串?dāng)U展。對于同樣的字符串,從a[2]=a開始擴(kuò)展 ,都屬擴(kuò)展會依次考慮子串a[1-2]=ba不是回文,停止擴(kuò)展。

參考代碼如下:

#include<stdio.h>
#include
<string.h>
int count=0;
char s[5001];   
int main(){
       
int k,l,r;
       
int len;
       
while(gets(s)){
              count
=0;               
              len
=strlen(s);        
              
for(k=1;k<len-1;k++){  
                     l
=k-1,r=k+1;
                     
while(l>=0&&r<len){  //奇數(shù)長度串
                            if(s[l--]==s[r++])
                                   count
++;
                            
else
                                   
break;
                     }
                     l
=k-1,r=k;
                     
while(l>=0&&r<len){   //偶數(shù)長度串
                            if(s[l--]==s[r++])
                                   count
++;
                            
else
                                   
break;
                     }
                    
              }
              
if(s[len-1]==s[len-2])  //偶數(shù)長度的串少算了最后兩個字符,補(bǔ)上
                     count++;
              count
+=len;   
              printf(
"%d\n",count);
       }    
       
return 0;
}



只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


posts - 12, comments - 1, trackbacks - 0, articles - 1

Copyright © 李東亮

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区三区三区在线| 欧美成人精品福利| 亚洲第一精品电影| 国语精品中文字幕| 国产综合色在线| 亚洲高清免费| 亚洲国产人成综合网站| 亚洲精品裸体| 一区二区高清视频| 午夜精品区一区二区三| 亚久久调教视频| 久久久精品一区二区三区| 久久免费国产精品| 欧美激情黄色片| 亚洲欧洲在线一区| 欧美高清免费| 亚洲尤物在线| 久久青青草原一区二区| 快射av在线播放一区| 欧美电影免费观看高清完整版| 欧美激情bt| 国产欧美在线观看| 亚洲日本va午夜在线电影| 亚洲综合欧美日韩| 久久精品91久久香蕉加勒比| 亚洲二区视频在线| 亚洲天堂男人| 欧美不卡高清| 国产色综合天天综合网| 亚洲精品日韩在线| 久久国产精彩视频| 亚洲肉体裸体xxxx137| 午夜在线视频一区二区区别| 欧美成人中文字幕| 国产一区二区欧美| 亚洲免费影视| 亚洲福利视频一区二区| 亚洲欧美www| 欧美日韩成人在线播放| 1024精品一区二区三区| 欧美一级午夜免费电影| 亚洲精品视频在线观看网站| 亚洲午夜高清视频| 久久视频在线免费观看| 中文亚洲免费| 欧美日韩久久不卡| 在线观看91精品国产入口| 午夜久久久久久久久久一区二区| 免费精品视频| 亚洲影院在线观看| 欧美日韩另类综合| 影音先锋中文字幕一区| 欧美一区二区黄色| 一区二区三区四区五区精品| 欧美黑人多人双交| 亚洲人成网在线播放| 久久久久久久综合狠狠综合| 亚洲一区二区免费看| 欧美日韩综合视频网址| 日韩视频免费观看高清在线视频 | 中文亚洲视频在线| 欧美特黄视频| 中文国产一区| 夜夜嗨av一区二区三区中文字幕| 欧美激情日韩| 亚洲免费av片| 亚洲精品午夜| 欧美日韩精品久久久| 亚洲精品视频二区| 亚洲精品麻豆| 欧美丝袜一区二区| 午夜日韩在线观看| 午夜精品亚洲一区二区三区嫩草| 国产精品美女www爽爽爽视频| 99在线热播精品免费99热| 亚洲精品国久久99热| 欧美日韩成人一区二区| 亚洲一区二区三区在线播放| 亚洲一区二区三区免费观看| 国产精品久久久久久超碰| 午夜精品在线观看| 性欧美超级视频| 一区二区视频免费完整版观看| 另类春色校园亚洲| 欧美成人精品一区二区| 日韩系列欧美系列| 99精品久久久| 国产精品大片免费观看| 久久精品国产一区二区电影 | 亚洲激情午夜| 国产精品久久久999| 久久精品二区三区| 久久蜜桃资源一区二区老牛| 亚洲精品国精品久久99热| 亚洲美女福利视频网站| 国产欧美一区二区三区在线看蜜臀| 久久精品男女| 欧美+日本+国产+在线a∨观看| 亚洲一区视频在线| 欧美一区二区三区在线观看| 久久亚洲欧美| 中文日韩在线| 欧美制服丝袜| 欧美一区免费| 9人人澡人人爽人人精品| 欧美一区二区三区视频在线| 91久久精品美女高潮| 亚洲欧美在线网| 亚洲三级国产| 久久疯狂做爰流白浆xx| 国产精品99久久不卡二区| 久久久91精品国产| 欧美一区二区精品| 欧美精品v日韩精品v国产精品| 午夜精品剧场| 欧美人妖在线观看| 免费看精品久久片| 国产精品捆绑调教| 亚洲另类春色国产| 亚洲精品国产欧美| 久久免费国产精品| 欧美专区在线| 国产精品亚洲аv天堂网| 亚洲福利电影| 亚洲国产视频a| 久久久不卡网国产精品一区| 午夜精品视频在线观看| 欧美日韩亚洲综合一区| 亚洲国产天堂久久综合网| 伊人久久综合97精品| 午夜欧美大片免费观看| 亚洲手机成人高清视频| 欧美精品九九| 亚洲精品乱码久久久久久按摩观| 裸体一区二区三区| 国内精品久久久| 亚洲一二三区精品| 亚洲一区999| 欧美视频在线免费| 一区二区久久| 亚洲桃色在线一区| 欧美日韩国产在线播放网站| 亚洲国产精品福利| 一区二区三区欧美亚洲| 欧美日韩国产一区二区三区| 日韩亚洲成人av在线| 99re6这里只有精品| 欧美精品尤物在线| 一区二区三区 在线观看视| 亚洲淫性视频| 国产酒店精品激情| 先锋影音国产一区| 久久蜜桃av一区精品变态类天堂| 国产一区二区三区高清在线观看| 欧美在线视频观看免费网站| 久久亚洲国产精品日日av夜夜| 国产一区二区三区黄视频| 久久精品国产免费看久久精品| 久久婷婷av| 亚洲裸体视频| 欧美视频在线观看免费网址| 欧美亚洲在线观看| 欧美大片一区二区| 亚洲性视频网站| 国产日韩综合一区二区性色av| 午夜一区二区三区不卡视频| 美女啪啪无遮挡免费久久网站| 亚洲成色777777女色窝| 国产精品久久久久久久久免费 | 欧美一区二视频| 黄色亚洲网站| 欧美激情第一页xxx| 在线一区二区日韩| 久久久欧美精品| 日韩亚洲成人av在线| 国产欧美一区二区三区另类精品 | 久久亚洲精品一区二区| 一本久道综合久久精品| 久久人人九九| 亚洲视频在线观看一区| 国产亚洲精品久久久| 欧美激情欧美激情在线五月| 亚洲欧美日韩第一区| 免费视频最近日韩| 午夜国产精品视频| 亚洲日本va午夜在线影院| 国产精品久线观看视频| 蜜臀av在线播放一区二区三区| 在线视频欧美精品| 欧美激情一区二区在线 | 一本久道久久综合狠狠爱| 久久久精品免费视频| 在线一区观看| 亚洲精华国产欧美| 亚洲欧美综合v| 亚洲精选在线观看| 欧美激情一区二区在线| 欧美一区午夜精品| 亚洲综合色丁香婷婷六月图片| 亚洲国产精品一区二区久|