C#IsStringMadeOf方法最快的技术是什么?

时间:2014-10-13 07:59:45

标签: string c#-4.0 extension-methods

我有一个被称为数千次的方法,但它目前运行起来很慢。有更好的技术吗?允许使用不安全的方法。

它只是检查输入字符串的字母是否可以由其他字符串的字母组成,如字谜检查器。

这是我目前的方法。

public static bool IsStringMadeOf(this string str, string from)
{
    for (int i = 0; i < str.Length; i++)
    {
        int index = from.IndexOf(str[i]);
        if (index != -1)
        {
            from = from.Remove(index, 1);
        }
        else
        {
            return false;
        }
    }
    return true;
}

对于我的测试用例,结果应如下:

str    | from        | result
-------------------------------
SLOW   | WSOL        | true
SLOW   | WTOL        | false
ASIA   | XZYABSTRIB  | false
ASIA   | XZYABSTRIAB | true

1 个答案:

答案 0 :(得分:3)

首先,你在这里有一个很多的字符串操作 - 你通过每次删除一个字符来创建许多新字符串,并且你正在使用{{1}很多。

我会简单地开始非常 - 只需对每个字符串中的字符进行排序,然后查看序列是否相等:

IndexOf

如果你有很长的琴弦,这肯定会有很大的帮助。对于短字符串,public static bool IsStringMadeOf(this string str, string from) { if (str.Length != from.Length) { return false; } char[] strArray = str.ToCharArray(); char[] fromArray = from.ToCharArray(); Array.Sort(strArray); Array.Sort(fromArray); for (int i = 0; i < strArray.Length; i++) { if (strArray[i] != fromArray[i]) { return false; } } return true; } 数组的创建可能最终占据主导地位......但这至少是我尝试开始的。

请注意,以上是此LINQ版本的略微优化形式:

char
相关问题