| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1362 人关注过本帖
标题:求此题解题思想和代码
只看楼主 加入收藏
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
结帖率:94.44%
收藏
已结贴  问题点数:20 回复次数:15 
求此题解题思想和代码
题目描述
You're given a string of lower-case Latin letters. Your task is to find the length of its longest substring that can be met in the string at least twice. These occurrences can overlap (see sample test 2).

输入描述
The first input line contains the string. It's guaranteed, that the string is non-empty, consists of lower-case Latin letters, and its length doesn't exceed 100.

输出描述
Output one number — length of the longest substring that can be met in the string at least twice.

样例输入
abcd
ababa
zzz
样例输出
0
3
2

搜索更多相关主题的帖子: 解题 思想 代码 
2010-08-09 09:38
lampeter123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:54
帖 子:2508
专家分:6424
注 册:2009-1-30
收藏
得分:3 
不知道C语言能否用正则表达式

你的优秀和我的人生无关!!!!
    
    我要过的,是属于我自己的生活~~~
2010-08-09 10:26
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:3 
把中文弄上来好吗,我自己翻译的可能不正确

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-08-09 10:49
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
无语。。。。
2010-08-09 11:08
hzh512
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:234
专家分:1333
注 册:2009-6-5
收藏
得分:3 
想了一下,只能用穷举了,不过效率还好,是O(n^2)

pseudocode:
程序代码:
for(i=2; i<n; i++)
{
    for(j=0; j<i; j++)
    {
        subString=String[j...j+i-1];
        if(KMP(subString)==true)
        {
            max=i;
            break;
        }
        else
            continue;
    }
    if(j == i)
        break;
}

 print max;


[ 本帖最后由 hzh512 于 2010-8-9 13:07 编辑 ]

编程=用几种语言在某个或几个平台上通过抽象思维运用一系列算法来解决现实中问题的手段
2010-08-09 11:32
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
用词霸翻译了一下,看看正确否:
1.你是一串lower-case拉丁字母。你的任务是寻找的子字符串的长度可以在线至少有两次。这些情况可以重叠(样本测试2)。
2.第一行中输入字符串。这是保证,那是non-empty,包括lower-case拉丁字母,它的长度不超过100英镑。

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-08-09 11:34
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:3 
不太对……

题目描述
给定一串小字的拉丁字母。任务是寻找最长的子串,它在该串中出现至少两次。出现的位置是可以重叠的(参考样例2)。
You're given a string of lower-case Latin letters. Your task is to find the length of its longest substring that can be met in the string at least twice. These occurrences can overlap (see sample test 2).
输入描述
第一行输入包含一个字符串。它一定一个非空,只含小写字母,且长度不超过 100 的串。
The first input line contains the string. It's guaranteed, that the string is non-empty, consists of lower-case Latin letters, and its length doesn't exceed 100.
输出描述
输出一个数,是那个最长的出现至少两次的子串的长度。
Output one number — length of the longest substring that can be met in the string at least twice.

样例输入
abcd
ababa
zzz
样例输出
0
3
2

样例一,没有重复的串。所以输出是0.
样例二,最长的那个串是 aba,它出现了两次。且第二次出现时首字母 a,是第一次的末字母。这就是题里说的可以重叠的意思,不只重叠一个字母。重叠多个也行。
第三个是 zz。这个例子说明全重叠是不行的(要不然看成zzz首尾全重叠两次就是3了),这样没什么意义,要不然什么题都是那个字符串本身的长度了。
2010-08-09 12:48
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
回复 5楼 hzh512
j+i-1这不会越界么?当n=6,i取5时,j+i-1=4+5-1=8,不是越界了么?

[ 本帖最后由 草狼 于 2010-8-9 13:35 编辑 ]
2010-08-09 13:26
hzh512
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:234
专家分:1333
注 册:2009-6-5
收藏
得分:0 
for(i=2; i<n; i++)
{// i控制子串长度String[j...j+i-1];从j到j+i-1  j+i - j = i
    for(j=0; j<i; j++)
    { //待确定了子串长度,然后就进行匹配,子串随着j的++ 沿整个串滑动匹配,一旦匹配,就break,接着进行i+1子串的匹配
        subString=String[j...j+i-1];
        if(KMP(subString)==true)
        {
            max=i;
            break;
        }
        else
            continue;
    }
    if(j == i)
        break;
}

[ 本帖最后由 hzh512 于 2010-8-9 13:35 编辑 ]

编程=用几种语言在某个或几个平台上通过抽象思维运用一系列算法来解决现实中问题的手段
2010-08-09 13:34
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
回复 9楼 hzh512
j+i-1这不会越界么?当n=6,i取5时,j+i-1=4+5-1=8,不是越界了么?

2010-08-09 13:37
快速回复:求此题解题思想和代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017559 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved