社区
C#
帖子详情
SZSM面试题:写一个可以返回任意两个string串的最大公串的函数
火鸟李国平
2006-06-19 11:45:20
可以写实例函数出来,也可以说说算法思路
我当时写了一个,但认为应该还有更优解
...全文
404
14
打赏
收藏
SZSM面试题:写一个可以返回任意两个string串的最大公串的函数
可以写实例函数出来,也可以说说算法思路 我当时写了一个,但认为应该还有更优解
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
火鸟李国平
2006-10-31
打赏
举报
回复
UP
shn228
2006-10-23
打赏
举报
回复
mark
shn228
2006-10-23
打赏
举报
回复
xuexi
火鸟李国平
2006-10-20
打赏
举报
回复
UP
feifeiyaqi2
2006-06-22
打赏
举报
回复
up
火鸟李国平
2006-06-22
打赏
举报
回复
在CSDN上看到了soholi(天涯孤棹) 网友实现上更简洁的算法:
public static string GetLargePublicString(string A,string B)
{
string shortString = A.Length > B.Length ? B : A;//取较短者;
string longString = A.Length > B.Length ? A : B;//取较长者;
for (int i = shortString.Length; i > 0; i--)//长度递减
{
for (int j = 0; j <= shortString.Length - i; j++)//位置递增
{
if (longString.IndexOf(shortString.Substring(j,i)) != -1)
{
return shortString.Substring(j, i);
}
}
}
return string.Empty;
}
真是可以算是不能再优雅简洁的实现了,唯一的缺点就是,这个算法的效率比我的那个实现稍微慢了一些,尤其是在两个文本串都比较长的情况之下,因为两个实现最核心的区别就在于,我那个GetPubMaxString是先定位确实存在的一个字符后,才开始找这个一定存在,但长度未知的公共串,而网友soholi(天涯孤棹) 的GetLargePublicString则是在长串遍历整个短串的组合,这两者比较起来,也算是一个时间有优势,一个空间有优势的差别吧,不知大家还有没有更让人有启发的实现
搬运工木木
2006-06-19
打赏
举报
回复
呵呵,CSDN的字符串排列有问题...
第一步是只有一个字符串重叠
第X步是aaa的最后一个字符串和bbb的最后一个字符串重叠
搬运工木木
2006-06-19
打赏
举报
回复
楼主的算法可能比我想的高效,我也写一下,就当是抛砖引玉吧
不涉及语言,只是思想
开始比较时:
第一步
aaaaa
bbbbbbbbbbbbbbbbbbb
第二步
aaaaa
bbbbbbbbbbbbbbbbbbb
......
第X步
aaaaa
bbbbbbbbbbbbbbbbbbb
最后一步
aaaaa
bbbbbbbbbbbbbbbbbbb
只比较相个字符串重叠的部分,重叠部分要全部比较,不管中间有没有不相等的,也就是取重叠部分中最大公共字符串
在第 X 步和 最后一步之间的比较不是必需的,如果重叠部份已经小于已知MAX_LEN,则可中止比较了
aaa 和bbb 长短无所谓
感觉,楼主的算法比我的效率要高
yangxd_yi
2006-06-19
打赏
举报
回复
刚才写错了个字
感兴趣:
首先确定两个字符串的长度,长度分别为m 和n
假设我们m >= n
那么需要比较的最多比较次数为: 1+2+3+...+n次,最少比较次数为1
yangxd_yi
2006-06-19
打赏
举报
回复
感兴趣:
首先确定两个字符串的长度,长度分别为m 和n
假设我们m >= n
那么需要比较的最低次数为: 1+2+3+...+n次
火鸟李国平
2006-06-19
打赏
举报
回复
我的实现:
public static string GetPubMaxString(string Value1,string Value2)
{
string result=null,stmp;
int maxLen=0;
if (Value2.Length>Value1.Length)//确保Value1是长串
{
stmp=Value1;
Value1=Value2;
Value2=stmp;
}
for (int i=0;i<Value2.Length;i++)
{
if (Value1.IndexOf(Value2[i])>-1)//长串中依次判断短串的每个字符是否出现
{
stmp=Value2.Substring(i);//截取短串中出现字符到末尾存入变量
for (int ii=stmp.Length;ii>0;ii--)
{
if (Value1.IndexOf(stmp.Substring(0,ii))>-1)//长串中依次判断短串变量的左取子串是否出现
if (ii>maxLen) //如果出现并且此串长度大于上串的长度
{
result=stmp.Substring(0,ii);
maxLen=ii;
}
}
}
}
return result;
}
搬运工木木
2006-06-19
打赏
举报
回复
我感觉最差的好像要大约m*n次比较(单字符串)
搬运工木木
2006-06-19
打赏
举报
回复
标记一下,楼主算法是怎么样的?
火鸟李国平
2006-06-19
打赏
举报
回复
我的思路:
1.确定一个串为长串,另一个串为短串,在长串中找短串(长串中最长的公串可能性就是短串本身)
2.顺序确定短串中的每个字符是否在长串中出现(先做一个预定位)
3.如满足条件2,即短串中某个字符在长串中出现,在长串中试图找从这个字符起到短串末尾止的整个串
4.如果不满足条件3,短串末尾递减1个字符,直到找到此次字符出现的最大长度(至少是一个字符)
5.把此次找到的字符长度,与临时变量比较,如果此次长度大于历史长度,重赋值返回值
6.重复2-5,直到短串末尾
DCSS安全沙盒系统介绍
DCSS安全沙盒系统介绍 安全沙盒系统理念 安全沙盒系统体系介绍 安全沙盒系统特性 安全沙盒系统产品功能 安全沙盒系统硬件外观 安全沙盒系统课件介绍 安全沙盒系统部署
CSDN论坛面试经验和
面试题
集锦
CSDN论坛面试经验和
面试题
集锦 面试经验 综合/算法 C/C++/VC MS-SQL Server Java .NET技术 Oracle 其他
String
类型赋初值问题
* 在静态方法里面创建
一个
局部变量,必须对其进行初始化赋值 * * @author 2萌 * */ public class
String
Test { static
String
a
String
; //
String
a
String
; int a; /** * 普通方法:对于成员变量没有赋...
CSDN论坛面试经验和
面试题
集锦(zz)
zz from http://community.csdn.net/Expert/mianshi060906.htm#CSDN论坛面试经验和
面试题
集锦 面试经验 综合/算
ArrayCopy方法int数组、
String
数组使用实例
1 package com.
szsm
.swing.other; import java.lang.reflect.Array; public class Answer_1606 { ... public static void main(
String
[] args) { Test test = new Test(); test.is = (int[]) addArrayLengt
C#
110,499
社区成员
642,566
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章