算法问题(100分)

  • 主题发起人 主题发起人 unixhost
  • 开始时间 开始时间
U

unixhost

Unregistered / Unconfirmed
GUEST, unregistred user!
有很长的字符串,由26个英文字母组成,只是小写。
如:
aabbbddiekdososooaabkdieieipquekdvnsuencjsuncnu
sadijenfiedmssdkj
目的是从这串字符中找出相同的字符串出现次数,及它们之间的距离。
如:aab出现几次,及其之间隔了几个字符。
相同的字符串长度是未定的,可能是只有一个字符,找最长的。

请帮助分析,最好给出程序.
 
用数组做。
先将整个字符串存入一个数组1中,再将要查的字符串存入另一数组2中,将数组1做
循环,用数组2去匹配。如果一样就将数组1的位置存入数组3中,并将累加变量加1。最后
输出数组3元素间的差及累加变量。
还可以用指针做。
不用C语言,用Delphi或其他的可视化开发工具就比较简单了。
 
没有待查的字符串
 
我可以提供一些想法,但是我没试过。
可以这样比较:
a s d l s d i f
s *
d *
l
s *
d *
i
f
看看斜向下45度的线的长度有多长,当然要除了对角线。不知道有没看明白。

 
相当复杂呀?!
 
可用堆栈的办法。
把每个字符取出,压入堆栈,然后比较。
 
用递归算法,我只是个想法
 
字符串比较参阅《数据结构》(清华)
 
〉相同的字符串长度是未定的,可能是只有一个字符,找最长的。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~呵呵,最长的重复1次

============================================================================
开开玩笑,大家继续讨论,我洗洗耳朵来听。
 
用堆栈吧.
 
agree Riantwin
 
可以在一个循环中进行(以子串的长度为循环变量,从大到小)
将所有的子串分解到数组中进行比较。只要有相同的字串就可以结束循环。
 

建议先找符合要求的短字符串,符合要求的长字符串必由这些符合要求的短字符串
按相同的顺序组成。




 
数据结构教材上讲的KMP字符串匹配算法是您需要的
 
多人接受答案了。
 
后退
顶部