我正在尝试编写一个算法,找到字符串的反语法子串的数量例如,字符串"abba"有4个:
(1)"a""a"
(2)"b""b"
(3)"ab""ba"
(4)"abb""bba"
我想用来优化的一个事实是
如果字符串没有长度为k的子字符串的语法对,
那么它没有长度为k+1的子串的语法对
你能确认那是不是真的吗?
因为我的算法

static int NumAnagrammaticalPairs(string str)
{
    int count = 0; // count of anagrammatical pairs found
    int n = str.Length / 2; // OPTIMIZATION: only need to look through the substrings of half the size or less
    for(int k = 1; k <= n; ++k)
    {
        // get all substrings of length k
        var subsk = GetSubstrings(str,k).ToList();

        // count the number of anagrammatical pairs
        var indices = Enumerable.Range(0, subsk.Count);
        int anapairs = (from i in indices
                        from j in indices
                        where i < j && IsAnagrammaticalPair(subsk[i], subsk[j])
                        select 1).Count();

        // OPTIMIZATION: if didn't find any anagrammatical pairs in the substrings of length k,
        // there are no anagrammatical pairs in the substrings of length k+1, so we can exit
        // the loop early
        if(anapairs == 0)
            break;
        else
            count += anapairs;
    }
    return count;
}

正在获取结果sligggtttthhhly off(通常由1关闭)测试用例中的实际结果。

最佳答案

不是这样的-abcdcdab是长度为4的anagram s,但是找不到长度为3的anagram子串。具体来说,abcdab将不起作用,因为它包含abcdcdab,但没有3个anagrams(fromabcbcdcdadab,)。

07-26 06:21