asp.net下比较两个等长字符串是否含有完全相同字符(忽略字符顺序)
2010-06-09 00:00
746 查看
例如:“北京欢迎你”和“欢迎你北京”,于是有了下列的测试,但是发现效率应该还有提升的空间,不知道有没有其他更好的办法。
刚开始是这样想的,判断两个字符串中的字符是否含有完全相同的字符需要两个条件
1,两个字符串长度相同
2,两个字符串中的每个字符都在对方的串中
比如前面说的:“北京欢迎你”和“欢迎你北京”,于是有了下面的一段代码:
测试通过,但是当两个字符串中有重复的字符呢,如:“4455”和“4555”,那么上面的程序就无能为力了,只能判断两个字符串都含有4和5,但是却无法判断两个字符的数量是否一样,无法满足要求,所以处理两个字符串的需求又变成这样:
1,两字符串中任意一个字符都在对方的串中
2,两字符串中任意一个字符的数量与对方串中相同字符的数量相等
3,两个字符串长度相等(由于2,可取消。)
改造后的程序如下:
比较两个字符串是否含有完全相同的字符
感觉还有更好的办法,抛砖引玉,希望朋友们不吝赐教。
上面的比较两个等长字符串是否含有完全相同字符(忽略字符顺序)有朋友说了更为简单的办法,中午实现了一下。多谢 Paradox。
需求是比较两个字符串中含有的字符是否完全相同,即“我和你”与“你和我”是含有相同字符的。
这个实现的基本逻辑是这样的,将两个字符串分别放到List中,做简单的循环判断,如果A集合中的字符在B中出现,则同步删除A与B中的这个字符。
至于有朋友说采用最大公共字符串的方法,LCS和LD算法的话,在矩阵中找的话个人以为不比这个省多少时间,有空了试试。
作者:LeonWeng
出处:http://cnblogs.com/wengyuli
刚开始是这样想的,判断两个字符串中的字符是否含有完全相同的字符需要两个条件
1,两个字符串长度相同
2,两个字符串中的每个字符都在对方的串中
比如前面说的:“北京欢迎你”和“欢迎你北京”,于是有了下面的一段代码:
private static bool CompareStringByChar(string strA,string strB) { bool IsEqual = true; char[] arrA = strA.ToCharArray(); char[] arrB = strB.ToCharArray(); foreach (char chara in arrA) { if (!strB.Contains(chara)) { IsEqual = false; } } foreach (char charb in arrB) { if (!strA.Contains(charb)) { IsEqual = false; } } return IsEqual; }
测试通过,但是当两个字符串中有重复的字符呢,如:“4455”和“4555”,那么上面的程序就无能为力了,只能判断两个字符串都含有4和5,但是却无法判断两个字符的数量是否一样,无法满足要求,所以处理两个字符串的需求又变成这样:
1,两字符串中任意一个字符都在对方的串中
2,两字符串中任意一个字符的数量与对方串中相同字符的数量相等
3,两个字符串长度相等(由于2,可取消。)
改造后的程序如下:
比较两个字符串是否含有完全相同的字符
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace StringCompare { class Program { static void Main(string[] args) { string a = "4555"; string b = "5544"; Console.WriteLine(CompareStringByChar(a,b)); Console.Read(); } //比较两个字符串是否含有完全相同的字符 private static bool CompareStringByChar(string strA,string strB) { bool IsEqual = true; char[] arrA = strA.ToCharArray(); char[] arrB = strB.ToCharArray(); foreach (char chara in arrA) { if (!strB.Contains(chara)) { IsEqual = false; } else { if(GetSameCharCount(chara,arrA)!=GetSameCharCount(chara,arrB)) { IsEqual = false; } } } foreach (char charb in arrB) { if (!strA.Contains(charb)) { IsEqual = false; } else { if (GetSameCharCount(charb, arrA) != GetSameCharCount(charb, arrB)) { IsEqual = false; } } } return IsEqual; } //获得某字符在字符串中的数量 private static int GetSameCharCount(char chara,char[] arrChar) { int count = 0; foreach(char a in arrChar) { if(chara==a) { count++; } } return count; } } }
感觉还有更好的办法,抛砖引玉,希望朋友们不吝赐教。
上面的比较两个等长字符串是否含有完全相同字符(忽略字符顺序)有朋友说了更为简单的办法,中午实现了一下。多谢 Paradox。
需求是比较两个字符串中含有的字符是否完全相同,即“我和你”与“你和我”是含有相同字符的。
这个实现的基本逻辑是这样的,将两个字符串分别放到List中,做简单的循环判断,如果A集合中的字符在B中出现,则同步删除A与B中的这个字符。
至于有朋友说采用最大公共字符串的方法,LCS和LD算法的话,在矩阵中找的话个人以为不比这个省多少时间,有空了试试。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace StringCompare { class Program { static void Main(string[] args) { string strA = "中华人民共和国"; string strB = "共和国人民中华"; List<char> listA = strA.ToList(); List<char> listB = strB.ToList(); for (int i = 0; i < listA.Count;i++ ) { for (int j = 0; j < listB.Count;j++ ) { if (listA[i].ToString() == listB[j].ToString()) { listA.RemoveAt(i); listB.RemoveAt(j); i--; j--; break; } } } if (listA.Count == 0 && listB.Count == 0) { Console.WriteLine("相等"); } else { Console.WriteLine("不相等"); } Console.Read(); } } }
作者:LeonWeng
出处:http://cnblogs.com/wengyuli
相关文章推荐
- 比较两个等长字符串是否含有完全相同字符(忽略字符顺序)
- C#下比较两个等长字符串是否含有完全相同字符(忽略字符顺序)
- 比较两个等长字符串是否含有完全相同字符(忽略字符顺序)
- 快速比较两个字符串中字符完全相同(兄弟字符串比较)
- 假设两个字符串中所含有的字符和个数都相同我们就叫这两个字符串匹配, 比如:abcda和adabc,由于出现的字符个数都是相同,只是顺序不同, 所以这两个字符串是匹配的。要求高效!
- PHP 如何快速比较两个字符串中字符完全相同?
- 6-2-1 字符串-字符串变量String-创建字符串变量-初始化字符串变量-字符串连接-输入字符串(单词、行)-对象变量的赋值-比较两个字符串是否同一个-比较两个字符串内容是否相同
- go判断两个字符串是否是是相互打乱的,也就是说它们有着相同的字符,但 是对应不同的顺序。
- 编写一个函数,判断两个字符串是否是是相互打乱的,也就是说它们有着相同的字符,但是对应不同的顺序。
- 快速比较两个字符串中字符完全相同(兄弟字符串比较)
- 汇编语言: 试编写一段程序,要求比较两个字符串 string1 和 string2 所含字符是否相等,如相 等则显示“MATCH”, 若不相同则显示“NO MATCH”。
- Asp.Net截取两个相同字符之间的字符串内容(示例)
- 判断两个字符串中出现的字符是否完全一样(顺序可以不同)
- 判断两个字符串是否有相同的字符
- 比较两个字符串的连接模式是否相同
- 比较两个json是否相等,忽略数组内元素顺序
- 比较两个字符串A和B,确定A中是否包含B中所有的字符。
- 两个字符串比较是否相同
- 判断一个字符串是否含有相同字符