我试图解决以下问题字谜时间复杂度
您将得到两个字符串。大小为n的B,大小为m的B。与n相比,m是非常非常非常小的数字。找出一个包含子这 是B的字谜
,我采取的方法是如下
public static boolean ana_check(String a, String b)
{
int n=a.length();
int m=b.length();
boolean k;
for(int i=0;i<=(n-m);i++){
k= anagram((a.substring(i,i+m)),b);
if(k)
return true;
}
return false;
}
正如你可以看到我提取从头开始的长度为m每串的字符串A并检查它是否是B的一个字母。 为了检查谜语,我为每个字符串建立一个频率映射,如果发现它们是相同的,我会返回true。代码如下:
public static boolean anagram(String s, String t) {
// Strings of unequal lengths can't be anagrams
if(s.length() != t.length()) {
return false;
}
// They're anagrams if both produce the same 'frequency map'
return frequencyMap(s).equals(frequencyMap(t));
}
private static Map<Character, Integer> frequencyMap(String str) {
Map<Character, Integer> map = new HashMap<Character, Integer>();
for(char c : str.toLowerCase().toCharArray()) {
Integer frequency = map.get(c);
map.put(c, frequency == null ? 1 : frequency+1);
}
return map;
}
我相信anagram方法运行在O(n)时间。方法ana_check的时间复杂度是多少?整体代码是线性的还是二次的?