438. Find All Anagrams in a String
题目描述
Given a string s and a non-empty string p, find all the start indices of p’s anagrams in s.
Strings consists of lowercase English letters only and the length of both strings s and p will not be larger than 20,100.
The order of output does not matter.
Example 1:
Input:
s: "cbaebabacd" p: "abc"
Output:
[0, 6]
Explanation:
The substring with start index = 0 is "cba", which is an anagram of "abc".
The substring with start index = 6 is "bac", which is an anagram of "abc".
Example 2:
Input:
s: "abab" p: "ab"
Output:
[0, 1, 2]
Explanation:
The substring with start index = 0 is "ab", which is an anagram of "ab".
The substring with start index = 1 is "ba", which is an anagram of "ab".
The substring with start index = 2 is "ab", which is an anagram of "ab".
就是在一个字符串A中,找到是否存在字符串B的Anagrams。
代码实现
class Solution {
public:
__inline bool isAnagrams(vector<int> & hash) {
for(auto i:hash) if(i) return false;
return true;
}
vector<int> findAnagrams(string s, string p) {
int slen = s.length(), plen = p.length();
vector<int> res;
vector<int> phash(26, 0);
if(slen < plen) return res;
for(int i = 0; i < plen; i++) phash[p[i]-'a']++;
for(int i = 0; i <= slen - plen; i++) {
if(i == 0)
for(int j = i; j < plen; j++)
phash[s[j]-'a']--;
if(i) { phash[s[i-1]-'a']++; phash[s[i+plen-1]-'a']--; }
if(isAnagrams(phash)) res.push_back(i);
}
return res;
}
};
389. Find the Difference
题目描述
Given two strings s and t which consist of only lowercase letters.
String t is generated by random shuffling string s and then add one more letter at a random position.
Find the letter that was added in t.
Example:
Input:
s = "abcd"
t = "abcde"
Output:
e
Explanation:
'e' is the letter that was added.
找到字符串t中比字符串p多出来的一个字符。
用哈希,没毛病。
代码实现
class Solution {
public:
char findTheDifference(string s, string t) {
int slen = s.length();
vector<int> hash(26, 0);
for(int i = 0; i < slen; i++) { hash[t[i]-'a']++; hash[s[i]-'a']--; }
hash[t[slen]-'a']++;
for(int i = 0; i < 26; i++) if(hash[i]) return char('a'+i);
return 'a';
}
};