Humming Distance and Repeated Substring Pattern

This commit is contained in:
Vahagn Khachatryan
2019-03-03 23:09:42 +00:00
parent 512299de0a
commit cdb9ae83db
2 changed files with 78 additions and 0 deletions

View File

@@ -0,0 +1,37 @@
/*
LeetCode
461. Hamming Distance
Easy
The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers x and y, calculate the Hamming distance.
Note:
0 ≤ x, y < 231.
Example:
Input: x = 1, y = 4
Output: 2
Explanation:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
The above arrows point to positions where the corresponding bits are different.
*/
class Solution {
public:
int hammingDistance(int x, int y) {
unsigned z = x ^ y;
z = (z & 0x55555555) + ((z >> 1) & 0x55555555);
z = (z & 0x33333333) + ((z >> 2) & 0x33333333);
z = (z & 0x0f0f0f0f) + ((z >> 4) & 0x0f0f0f0f);
z = (z & 0x00ff00ff) + ((z >> 8) & 0x00ff00ff);
z = (z & 0x0000ffff) + ((z >> 16) & 0x0000ffff);
return z;
}
};

View File

@@ -0,0 +1,41 @@
/*
LeetCode
459. Repeated Substring Pattern
Easy
Given a non-empty string check if it can be constructed by taking a substring of it and appending multiple copies of the substring together. You may assume the given string consists of lowercase English letters only and its length will not exceed 10000.
Example 1:
Input: "abab"
Output: True
Explanation: It's the substring "ab" twice.
Example 2:
Input: "aba"
Output: False
Example 3:
Input: "abcabcabcabc"
Output: True
Explanation: It's the substring "abc" four times. (And the substring "abcabc" twice.)
*/
bool repeatedSubstringPattern(string s) {
size_t n = (s.size()+1)/2;
for (size_t i = 1; i <= n; ++i){
if (s[i] == s[0] && s.size() % i == 0){
size_t j = i;
for (; j < s.size() && s[j] == s[j-i]; ++j);
if (j == s.size()){
return true;
}
}
}
return false;
}