字符串匹配小问题 如何用C#高效的统计出字符串TestStr和Str中的公共字符的个数,尽量少用foreach循环。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 string s1="asdfg";string s2="cvdfhjkl";int count=0; int n = s1.Length > s2.Length ? s2.Length : s1.Length;for (int i = 0; i < n; i++) { if (s1.Substring(i, 1) == s2.Substring(i, 1)) //同位置字符是否相同 { count++; } } 那如果TestStr =ab,Str =aab,那么2楼的算法不就计算有偏差了吗?结果应该是2,但上述方法结果只能是1.我觉得上述方法是用于计算公共子串的算法,而不是公共字符的算法,您说呢? 使用LINQ:var e=from m in first1 from n in second2 where m.Equals(n) select m;Console.WriteLine(e.count()); /// <summary> /// lcs算法,最长公共字串 /// </summary> /// <param name="s1"></param> /// <param name="s2"></param> /// <returns></returns> public static string LCS(this string s1, string s2) { if (s1 == s2) return s1; else if (String.IsNullOrEmpty(s1) || String.IsNullOrEmpty(s2)) return null; var d = new int[s1.Length, s2.Length]; var index = 0; var length = 0; for (int i = 0; i < s1.Length; i++) { for (int j = 0; j < s2.Length; j++) { // 左上角值 var n = i - 1 >= 0 && j - 1 >= 0 ? d[i - 1, j - 1] : 0; // 当前节点值 = "1 + 左上角值" : "0" d[i, j] = s1[i] == s2[j] ? 1 + n : 0; // 如果是最大值,则记录该值和行号 if (d[i, j] > length) { length = d[i, j]; index = i; } } } return s1.Substring(index - length + 1, length); } 有办法获得进程文件的位置(文件夹)吗? 通过程序添加的datagridview列无法获取到列值 .net视频聊天软件源代码 C#已经不能编写DDE了么? 關於字符串問題目 怎样检测TreeView重命名是否为空?(C/S模式) 微软的条码控件MSBCODE9.OCX , 在WEB里怎么用啊!在线等请大家帮忙 重写textbox的onKeyPress事件 有什么好的关于C#的论坛,请介绍几个。 【求助】派生类中的函数访问基类同名数据成员的问题 各位高手问一个问题:动态添加dropdownlist的items时,如何添加了重复的如何避免? Tabcontrol控件 多选项卡 共享tabpage
string s1="asdfg";
string s2="cvdfhjkl";
int count=0;
int n = s1.Length > s2.Length ? s2.Length : s1.Length;
for (int i = 0; i < n; i++)
{
if (s1.Substring(i, 1) == s2.Substring(i, 1)) //同位置字符是否相同
{
count++;
}
}
var e=from m in first1
from n in second2
where m.Equals(n)
select m;
Console.WriteLine(e.count());
/// lcs算法,最长公共字串
/// </summary>
/// <param name="s1"></param>
/// <param name="s2"></param>
/// <returns></returns>
public static string LCS(this string s1, string s2)
{
if (s1 == s2)
return s1;
else if (String.IsNullOrEmpty(s1) || String.IsNullOrEmpty(s2))
return null; var d = new int[s1.Length, s2.Length]; var index = 0;
var length = 0; for (int i = 0; i < s1.Length; i++)
{
for (int j = 0; j < s2.Length; j++)
{
// 左上角值
var n = i - 1 >= 0 && j - 1 >= 0 ? d[i - 1, j - 1] : 0; // 当前节点值 = "1 + 左上角值" : "0"
d[i, j] = s1[i] == s2[j] ? 1 + n : 0; // 如果是最大值,则记录该值和行号
if (d[i, j] > length)
{
length = d[i, j];
index = i;
}
}
} return s1.Substring(index - length + 1, length); }