本文主要是介绍每日两题 / 438. 找到字符串中所有字母异位词 238. 除自身以外数组的乘积(LeetCode热题100),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
438. 找到字符串中所有字母异位词 - 力扣(LeetCode)
记录p串每个字符出现次数
维护与p串等长的滑动窗口,记录其中每个字符的出现次数
每次滑动后将当前次数与p串的次数比较即可
class Solution {
public:vector<int> findAnagrams(string s, string p) {unordered_map<char, int> mp, cnt;for (auto t : p)cnt[t] ++ ;for (int i = 0; i < p.size() - 1 && i < s.size(); ++ i)mp[s[i]] ++ ;vector<int> ans;for (int r = p.size() - 1, l = 0; r < s.size(); ++ r, ++ l){mp[s[r]] ++ ;bool flag = true;for (auto t : mp){if (t.second != cnt[t.first]){flag = false;break;}}mp[s[l]] -- ;if (flag) ans.push_back(l);}return ans;}
};
238. 除自身以外数组的乘积 - 力扣(LeetCode)
维护"前缀和"与"后缀和"数组即可
由于用nums作为前缀和数组,ans作为后缀和数组,即可达到空间复杂度为 O ( 1 ) O(1) O(1) 的要求
class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {vector<int> ans = nums;for (int i = 1; i < nums.size(); ++ i)nums[i] *= nums[i - 1];for (int i = ans.size() - 2; i >= 0; -- i)ans[i] *= ans[i + 1];for (int i = 0; i < ans.size(); ++ i){if (i == 0) ans[i] = ans[i + 1];else if (i == ans.size() - 1) ans[i] = nums[i - 1];else ans[i] = nums[i - 1] * ans[i + 1];}return ans;}
};
这篇关于每日两题 / 438. 找到字符串中所有字母异位词 238. 除自身以外数组的乘积(LeetCode热题100)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!