Skip to content

Commit 075b7f6

Browse files
author
Gonzalo Diaz
committed
[Hacker Rank] Interview Preparation Kit: Dictionaries and Hashmaps: Two Strings. Solved ✓.
1 parent 1fc35ec commit 075b7f6

File tree

4 files changed

+195
-0
lines changed

4 files changed

+195
-0
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# [Two Strings](https://www.hackerrank.com/challenges/two-strings)
2+
3+
- Difficulty: `#easy`
4+
- Category: `#ProblemSolvingBasic`
5+
6+
## Clarification
7+
8+
The problem asks to find if there is a substring between 2 words,
9+
it does not require finding a particular one that meets a certain property,
10+
not counting all the possible ones.
11+
12+
With that in mind, simply find the first 1-letter intersection between two word
13+
to return "YES".
14+
The worst case is to return "NO" after going through both words letter by letter.
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# [Two Strings](https://www.hackerrank.com/challenges/two-strings)
2+
3+
- Difficulty: `#easy`
4+
- Category: `#ProblemSolvingBasic`
5+
6+
Given two strings, determine if they share a common substring.
7+
A substring may be as small as one character.
8+
9+
## Example
10+
11+
`s1 = 'and'`
12+
`s1 = 'art'`
13+
14+
These share the common substring `a`.
15+
16+
`s1 = 'be'`
17+
`s1 = 'cat'`
18+
19+
These do not share a substring.
20+
21+
## Function Description
22+
23+
Complete the function twoStrings in the editor below.
24+
25+
twoStrings has the following parameter(s):
26+
27+
- `string s1`: a string
28+
- `string s2`: another string
29+
30+
## Returns
31+
32+
- `string`: either YES or NO
33+
34+
## Input Format
35+
36+
The first line contains a single integer , the number of test cases.
37+
38+
The following pairs of lines are as follows:
39+
40+
The first line contains string `s1`.
41+
The second line contains string `s2`.
42+
43+
## Constraints
44+
45+
- `s1` and `s2` consist of characters in the range ascii[a-z].
46+
- $ 1 \leq p \leq 10 $
47+
- $ 1 \leq |s1|, |s2| \leq 10^5 $
48+
49+
## Output Format
50+
51+
For each pair of strings, return `YES` or `NO`.
52+
53+
## Sample Input
54+
55+
```text
56+
2
57+
hello
58+
world
59+
hi
60+
world
61+
```
62+
63+
## Sample Output
64+
65+
```text
66+
YES
67+
NO
68+
```
69+
70+
## Explanation
71+
72+
We have pairs to check:
73+
74+
1. `s1 = "hello"`, `s2 = "world"`. The substrings `"o"` and `"l"`
75+
are common to both strings.
76+
2. `a = "hi"`, `b = "world"`. `s1` and `s2` share no common substrings.
77+
78+
## Appendix
79+
80+
[Solution notes](two-strings-solution-notes.md)
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/**
2+
* @link Problem definition [[docs/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/two-strings.md]]
3+
*/
4+
5+
const __YES__ = 'YES';
6+
const __NO__ = 'NO';
7+
8+
export function twoStringsCompute(s1, s2) {
9+
for (const char of s1) {
10+
if (s2.includes(char)) {
11+
return true;
12+
}
13+
}
14+
return false;
15+
}
16+
17+
export function twoStrings(s1, s2) {
18+
return twoStringsCompute(s1, s2) ? __YES__ : __NO__;
19+
}
20+
21+
export default { twoStrings };
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import { describe, expect, it } from '@jest/globals';
2+
import { logger as console } from '../../../logger.js';
3+
4+
import { twoStrings } from './two_strings.js';
5+
6+
const TEST_CASES = [
7+
{
8+
title: 'Example 1 and 2',
9+
comparing: [
10+
{
11+
s1: 'and',
12+
s2: 'art',
13+
expected: 'YES'
14+
},
15+
{
16+
s1: 'be',
17+
s2: 'cat',
18+
expected: 'NO'
19+
}
20+
]
21+
},
22+
{
23+
title: 'Sample Test Case 0',
24+
comparing: [
25+
{
26+
s1: 'hello',
27+
s2: 'world',
28+
expected: 'YES'
29+
},
30+
{
31+
s1: 'hi',
32+
s2: 'world',
33+
expected: 'NO'
34+
}
35+
]
36+
},
37+
{
38+
title: 'Sample Test Case 6',
39+
comparing: [
40+
{
41+
s1: 'wouldyoulikefries',
42+
s2: 'abcabcabcabcabcabc',
43+
expected: 'NO'
44+
},
45+
{
46+
s1: 'hackerrankcommunity',
47+
s2: 'cdecdecdecde',
48+
expected: 'YES'
49+
},
50+
{
51+
s1: 'jackandjill',
52+
s2: 'wentupthehill',
53+
expected: 'YES'
54+
},
55+
{
56+
s1: 'writetoyourparents',
57+
s2: 'fghmqzldbc',
58+
expected: 'NO'
59+
}
60+
]
61+
}
62+
];
63+
64+
describe('two_strings', () => {
65+
it('twoStrings test cases', () => {
66+
expect.assertions(8);
67+
68+
TEST_CASES.forEach((testCase) => {
69+
testCase.comparing.forEach((test) => {
70+
const answer = twoStrings(test.s1, test.s2);
71+
72+
console.debug(
73+
`checkMagazine(${test.s1}, ${test.s2}) solution found: ${answer}`
74+
);
75+
76+
expect(answer).toStrictEqual(test.expected);
77+
});
78+
});
79+
});
80+
});

0 commit comments

Comments
 (0)