我正在尝试编写一个算法,找到字符串的反语法子串的数量例如,字符串"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关闭)测试用例中的实际结果。
最佳答案
不是这样的-abcd
和cdab
是长度为4的anagram s,但是找不到长度为3的anagram子串。具体来说,abcdab
将不起作用,因为它包含abcd
和cdab
,但没有3个anagrams(fromabc
,bcd
,cda
,dab
,)。