基本上我试图找出问题的解决方案Given a word and a text, we need to return the occurrences of anagrams。但是,我无法完全理解那里发布的一些解决方案。所以,我试图将问题转换为查找给定文本的排列的问题。这是我的算法(伪代码),我喜欢一些洞察力,看看它是否正确以及对发现其复杂性的一些见解。
int findAnagramOccurencesinText(String input,String find)
//generate a list of all possible permutations of the letters in find and store in a list
// eg/ if find ="dog" then list =["god","odg","dog","gdo","ogd","dgo"]
int occurances=0;
for String (perm:list)
{
index=-1;
while(index<input.length)
{
index=input.indexOf(perm,index);
if(index!=-1)
occurances++;
index+=1;
}
}
return occurances;
}
也是复杂度O(#inputlength)?任何有关如何找到此特定算法的复杂性(如果正确)的见解将不胜感激。
编辑:我知道这是一个O(n!)解决方案。我是否可以对其进行任何修改,以提高效率?(除了废弃整个方法并转向链接问题中提到的O(n)方法)
答案 0 :(得分:0)
一组O(n!)
元素有n
个排列。
因此,假设字符串搜索算法是线性时间,则时间复杂度为:
O((findLength)! inputLength)
以上假设find
没有重复,如果不重复,公式为slightly more complicated。