From cdb9ae83db89e874f033370befc70ca5c4537001 Mon Sep 17 00:00:00 2001 From: Vahagn Khachatryan Date: Sun, 3 Mar 2019 23:09:42 +0000 Subject: [PATCH] Humming Distance and Repeated Substring Pattern --- .../interviews/training/hamming_distance.cpp | 37 +++++++++++++++++ .../training/repeated_substring_pattern.cpp | 41 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 puzzles/interviews/training/hamming_distance.cpp create mode 100644 puzzles/interviews/training/repeated_substring_pattern.cpp diff --git a/puzzles/interviews/training/hamming_distance.cpp b/puzzles/interviews/training/hamming_distance.cpp new file mode 100644 index 0000000..0e8bc28 --- /dev/null +++ b/puzzles/interviews/training/hamming_distance.cpp @@ -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; + } +}; \ No newline at end of file diff --git a/puzzles/interviews/training/repeated_substring_pattern.cpp b/puzzles/interviews/training/repeated_substring_pattern.cpp new file mode 100644 index 0000000..5ebfb76 --- /dev/null +++ b/puzzles/interviews/training/repeated_substring_pattern.cpp @@ -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; +} \ No newline at end of file