假设两个字符串中所含有的字符和个数都相同我们就叫这两个字符串匹配,
比如:abcda和adabc,由于出现的字符个数都是相同,只是顺序不同,
所以这两个字符串是匹配的。要求高效!
比如:abcda和adabc,由于出现的字符个数都是相同,只是顺序不同,
所以这两个字符串是匹配的。要求高效!
static bool IsMatch(string s1, string s2)
{
if (s1 == null && s2 == null) return true;
if (s1 == null || s2 == null) return false;
if (s1.Length != s2.Length) return false;
int[] check = new int[128];
foreach (char c in s1)
{
check[(int)c]++;
}
foreach (char c in s2)
{
check[(int)c]--;
}
foreach (int i in check)
{
if (i != 0) return false;
}
return true;
}
这是一类如何迅速匹配兄弟字符串的问题。同样的道理也可以解决下边的方法。
假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些。从算法是讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有?
比如,如果是下面两个字符串:
String 1: ABCDEFGHLMNOPQRS
String 2: DCGSRQPOM
答案是true,所有在string2里的字母string1也都有。
如果是下面两个字符串:
String 1: ABCDEFGHLMNOPQRS
String 2: DCGSRQPOZ
答案是false,因为第二个字符串里的Z字母不在第一个字符串里。