亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1789 | 回復(fù): 3
打印 上一主題 下一主題

求解一最優(yōu)算法 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2007-11-01 11:25 |只看該作者 |倒序?yàn)g覽
找出一個(gè)字符串中最長(zhǎng)的“回文”子串。所謂回文就是對(duì)稱的字符串,比如A, ABA, ABBA這些都是回文字符串。
該題目比如:acdbbdf ,那么最長(zhǎng)的 “回文”子串是 dbbd; addbsbdf 那么最長(zhǎng)的回文子串是 dbsbd。
請(qǐng)高手給出算法。

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2007-11-01 11:52 |只看該作者
用分治算法能解決
不知道最優(yōu)不?

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2007-11-01 14:10 |只看該作者
用棧,每次比較和棧頂一樣的,若一樣出棧向下比較,一直到不一樣.
如果不一樣,記錄該次比較字符串首地址,和字符串長(zhǎng)度.
然后把字符串再壓回棧,繼續(xù)向下,一次就搞定.

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2007-11-01 14:23 |只看該作者

獻(xiàn)丑了:)

#include <stdio.h>
#include <string.h>

int getMaxStr(const char* src,char* dest) {
        int len=strlen(src);
        int start=0;
        int max=0,inc=0,add=0;
        for(int i=0;i<len;i++) {
                inc=len-i;
                /*
                對(duì)稱的時(shí)候
                */
                for(add=0;add<inc;add++) {
                        if(i-add<0) {
                                break;
                        }
                        if(src[i-add]!=src[i+add]) {
                                break;
                        }
                }
                inc=2*(add-1)+1;
                if(max<inc) {
                        max=inc;
                        start=i-add+1;
                }
                /*
                無中間值的對(duì)稱
                */
                inc=len-i-1;
                for(add=0;add<inc;add++) {
                        if(i-add<0) {
                                break;
                        }
                        if(src[i-add]!=src[i+add+1]) {
                                break;
                        }
                }
                inc=2*add;
                if(max<inc) {
                        max=inc;
                        start=i-add+1;
                }
        }
        memset(dest,0,max+1);
        strncpy(dest,src+start,max);
        return max;
}

int main(int argc,char** argv) {
        if(argc!=2) {
                printf("Usage:%s 字符串\n",argv[0]);
                return 0;
        }
        printf("輸入的字符串為:[%s]\n",argv[1]);
        int len=strlen(argv[1]);
        char* dest=new char[len+1];
        len=getMaxStr(argv[1],dest);
        printf("結(jié)果為:[%s],長(zhǎng)度為:[%d]\n",dest,len);
        return 1;
}

[[i] 本帖最后由 fzbook 于 2007-11-1 14:44 編輯 [/i]]
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP