高分求字符串比较的算法

wdtclv 2005-11-11 03:06:02
已知 字符串1 = “12345678”
字符串2 = “122346588”
要求:
1、将两个字符串的不同比较出来(假设字符串1是正确的)
2、将字符串2中错误的地方标识出来
...全文
600 57 打赏 收藏 转发到动态 举报
写回复
用AI写文章
57 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanshow 2005-11-18
  • 打赏
  • 举报
回复
string strFir = "2345678";
string strSec = "223456778";
if (strFir == strSec)
{
System.Console.WriteLine("二者相等{0}:",strFir);
}
else
{

for (int s = 0; s < strSec.Length; ++s)
{
if (strFir.IndexOf(strSec[s]) == -1)
{//不包含
System.Console.WriteLine("不包含!!!!");
}

else if (strFir.IndexOf(strSec[s]) != strFir.LastIndexOf(strSec[s]))
{ //包含超过1次
System.Console.WriteLine("包含超过1次!!");
}


}
for (int s = 0; s < strSec.Length-1; ++s)
{
if (strFir.IndexOf(strSec[s]) == strFir.LastIndexOf(strSec[s + 1]))
{
System.Console.WriteLine("重复!!!");
}
}
}
hainang1234 2005-11-17
  • 打赏
  • 举报
回复
static void Main()
{
string str1 = "123456789";
string str2 = "qq12345abc6789";
ArrayList list = com2(str1,str2);
foreach (object obj in list)
{
object[] arrayObj = (object[])obj;
strall += arrayObj[0].ToString()+"开始的"+arrayObj[1].ToString()+"位"+arrayObj[2].ToString()+"\r\n";
}
MessageBox.Show(strall);
}

static private ArrayList com2(string strold,string str2)
{
ArrayList putoutList = new ArrayList();
for (int j=0; j<str2.Length; j++)
{
for (int i=str2.Length-j; i>0; i--)
{
int re = strold.IndexOf(str2.Substring(j,i));
if (re != -1)
{
putoutList.Add(new object[]{j+1,i,"相等"});
j = j+i-1;
goto continueout;
}
}
//不相等
putoutList.Add(new object[]{j+1,1,"不相等"});

continueout:
continue;
}

return putoutList;
}
sonymusic 2005-11-17
  • 打赏
  • 举报
回复
to:wdtclv

a="ABCDEFG"
b="AAAAACDFG"
D=0,0,0,0,0,2,3,4,5

其实像这样的例子正好可以说明,这种情况第一位是否算错,你完全可以自己设定一个标准。因为这样的字串比对其实是模糊的判断了。好比就算人来判断,你也可以说错了,也可以说对了。因为字符个体是独立的,不联系上下文是无法判断的。当然第一个也比较特殊,完全可以根据位置来决定是否正确,如果这样判断的话,第一位是正确的,那后面的使用d(i+1)=d(i)+1来判断就都符合要求了。
wdtclv 2005-11-17
  • 打赏
  • 举报
回复
UE 是可以,我只是想要自己做啊
xu770 2005-11-17
  • 打赏
  • 举报
回复
Ultra Compare
wdtclv 2005-11-17
  • 打赏
  • 举报
回复
to :sonymusic 老兄
如果按照:
最后的这个数组如果d(i+1)=d(i)+1那么都算是正确的部分。剩余的部分都是出错的地方。
那像
a="ABCDEFG"
b="AAAAACDFG"
D=0,0,0,0,0,2,3,4,5
这种情况第一位就会标示错了
hainang1234 2005-11-17
  • 打赏
  • 举报
回复
没试试我的?
wdtclv 2005-11-17
  • 打赏
  • 举报
回复
to: sonymusic老兄
同样字符串的最后一位也不能比较
感谢你给的算法
看来也只能比较模糊的进行比较了
sonymusic 2005-11-16
  • 打赏
  • 举报
回复
修正一下上面的结果:
a="ABCDEFG"
b="AAAAACDFG"
D=0,0,0,0,0,2,3,4,5

之前对重复字符没有专门处理,判断的时候需要增加这部分的判断。
Liu_Qiang 2005-11-16
  • 打赏
  • 举报
回复
string str1 = "abcdefg";
string str2 = "abcdegf";

ArrayList al = new ArrayList();
if(str1.Length == str2.Length)
{
for(int i=0;i<str1.Length;i++)
{
if(str1[i] == str2[i])
{
al.Add(str1[i].ToString());
}
}
}
输出al的结果为:abcde
熊猫王子 2005-11-16
  • 打赏
  • 举报
回复
l=str1.length;
m=str2.length;
if(l<m)
{
从str2中抽取l个字符与str1进行比较;(遍历)
}
再递归
wdtclv 2005-11-16
  • 打赏
  • 举报
回复
哪怕是给个思路也好啊
wdtclv 2005-11-16
  • 打赏
  • 举报
回复
坛子里带星的各位大侠帮着出出吧
wang790809 2005-11-16
  • 打赏
  • 举报
回复
能力有限 关注中
cm8983 2005-11-16
  • 打赏
  • 举报
回复
mark
jianjian51 2005-11-16
  • 打赏
  • 举报
回复
问题出现的情况太多了 我自己多搞不懂 有多少中情况 没有办法帮你 在下无能为力 sorry
jianjian51 2005-11-16
  • 打赏
  • 举报
回复
这样考虑的问题太多了 能力有限关注中
wdtclv 2005-11-16
  • 打赏
  • 举报
回复
楼上的仁兄我的问题很简单,就是一个类似文稿的校对工作,就像报纸杂志的编辑校稿那样,拿原稿和打的稿件比较,只不过是通过程序去实现他,还是期望CSDN的牛人给出出主意啊
sonymusic 2005-11-16
  • 打赏
  • 举报
回复
to: wdtclv(将军)
我就是考虑了位置偏差,结果并不时要求位置对。而是顺序对……

请看这个结果判断:
最后的这个数组如果d(i+1)=d(i)+1那么都算是正确的部分。剩余的部分都是出错的地方。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

eg:
a="ABCDEFG"
b="AAAAACDFG"
D=0,-1,-1,-1,-1,2,3,4,5

a="ABCDEFG"
b="BCDGFA"
D=1,2,3,6,5,-1

a="AABCDAEFG"
b="BCEAEFG"
D=2,3,-1,5,6,7,8


到这样的结果的时候,我想你的目的应该可以达到了.:)
wdtclv 2005-11-16
  • 打赏
  • 举报
回复
to: syf2000119(ff)
怎么用?
加载更多回复(37)
目录 第一章 从零开始 8 1.1机试分析 8 1.2 IDE的选择与评测结果 10 1.3 DreamJudge的使用 11 1.4输入输出技巧 12 1.5头文件技巧 15 1.6数组使用技巧 16 1.7审时度势 — 复杂度与是否可做 19 1.8 C++ STL的使用 21 1.9多组输入的问题 27 第二章 入门经典 29 2.1 简单模拟 30 2.2 进制转换类问题 32 2.3 排版类问题 37 2.4 日期类问题 42 2.5 字符串类问题 45 2.6 排序类问题 47 2.7 查找类问题 54 2.8 贪心类问题 61 2.9 链表类问题 65 第三章 数学 68 3.1 同模余定理 69 3.2 最大公约数(GCD) 72 3.3 最小公倍数(LCM) 74 3.4 斐波那契数列 75 3.5 素数判定 76 3.6 素数筛选 78 3.7 分解素因数 81 3.8 二分快速幂 83 3.9 常见数学公式总结 85 3.10 规律神器OEIS 87 第四章 高精度问题 89 4.1 Python解法 90 4.2 Java解法 91 4.3 C/C++解法 92 第五章 数据结构 93 5.1 栈的应用 94 5.2 哈夫曼树 96 5.3 二叉树 102 5.4 二叉排序树 111 5.5 hash算法 114 5.6 前缀树 115 第六章 搜索 121 6.1 暴力枚举 122 6.2 广度优先搜索(BFS) 124 6.3 递归及其应用 127 6.4 深度优先搜索(DFS) 130 6.5 搜索剪枝技巧 135 6.6 终极骗分技巧 138 第七章 图论 139 7.1 理论基础 140 7.2 图的存储 145 7.3 并查集 148 7.4 最小生成树问题 151 7.5 最短路径问题 155 7.6 拓扑排序 162 第八章 动态规划 165 8.1 递推解 166 8.2 最大子段和 168 8.3 最长上升子序列(LIS) 170 8.4 最长公共子序列(LCS) 174 8.5 背包类问题 176 8.6 记忆化搜索 179 8.7 字符串相关的动态规划 182

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧