xqn2017

导航

438. Find All Anagrams in a String

原题:

438. Find All Anagrams in a String

解题:

两个步骤

1)就是从s中逐步截取p长度的字符串

2)将截取出的字符串和p进行比较,比较可以用排序,或者字典比较(这两种方法提交后都超时了)

代码如下(提交超时):

class Solution {
public:
	vector<int> findAnagrams(string s, string p) 
	{
		int lenp = p.length();
		int lens = s.length();
		int i=0,j,flag;

		vector <int> result;
		map <char,int> mapstr;
		map <char,int> maptemp;
		for(j =0; j < lenp;j++)
		{
			mapstr[p[j]]++;
		}
		while(i < lens)
		{
			maptemp = mapstr;
			flag = true;
			for(j = i; j < i +lenp;j++)
			{
				if(--maptemp[s[j]] < 0)
				{
					flag = false;
					break;
				}
			}
			if(flag)
			{
				result.push_back(i);
			}
			i++;
		}
		return result;
	}
};

  提交AC:

class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        if (s.empty()) return {};
        vector<int> res, m(256, 0);
        int left = 0, right = 0, cnt = p.size(), n = s.size();
        for (char c : p) ++m[c];
        while (right < n) {
            if (m[s[right++]]-- >= 1) --cnt;
            if (cnt == 0) res.push_back(left);
            if (right - left == p.size() && m[s[left++]]++ >= 0) ++cnt;
        }
        return res;
    }
};

  

 

posted on 2018-03-12 11:04  xqn2017  阅读(129)  评论(0)    收藏  举报