Form a string consisting of the common letters that appear in two input strings
The idea is to write a function that takes two strings and returns a new string that repeats in the previous two: examples:
'ABBA' & 'AOHB' => 'AB'
'cohs' & 'ohba' => 'oh'
A brute force solution would be nested for loops like so:
const x = 'ABCD'
const y = 'AHOB'
function subStr(str1, str2) {
let final = ''
for (let i = 0; i < str1.length; i++) {
for (let j = 0; j < str2.length; j++) {
if (str1[i] === str2[j]) {
final += str1[i]
}
}
}
return final
}
console.log(subStr(x, y)) // => ABjavascript algorithm strings
add a comment |
The idea is to write a function that takes two strings and returns a new string that repeats in the previous two: examples:
'ABBA' & 'AOHB' => 'AB'
'cohs' & 'ohba' => 'oh'
A brute force solution would be nested for loops like so:
const x = 'ABCD'
const y = 'AHOB'
function subStr(str1, str2) {
let final = ''
for (let i = 0; i < str1.length; i++) {
for (let j = 0; j < str2.length; j++) {
if (str1[i] === str2[j]) {
final += str1[i]
}
}
}
return final
}
console.log(subStr(x, y)) // => ABjavascript algorithm strings
2
Could you clarify, with additional examples, what should happen when letters appear in different orders within the two input strings?
– 200_success
Dec 26 at 5:41
add a comment |
The idea is to write a function that takes two strings and returns a new string that repeats in the previous two: examples:
'ABBA' & 'AOHB' => 'AB'
'cohs' & 'ohba' => 'oh'
A brute force solution would be nested for loops like so:
const x = 'ABCD'
const y = 'AHOB'
function subStr(str1, str2) {
let final = ''
for (let i = 0; i < str1.length; i++) {
for (let j = 0; j < str2.length; j++) {
if (str1[i] === str2[j]) {
final += str1[i]
}
}
}
return final
}
console.log(subStr(x, y)) // => ABjavascript algorithm strings
The idea is to write a function that takes two strings and returns a new string that repeats in the previous two: examples:
'ABBA' & 'AOHB' => 'AB'
'cohs' & 'ohba' => 'oh'
A brute force solution would be nested for loops like so:
const x = 'ABCD'
const y = 'AHOB'
function subStr(str1, str2) {
let final = ''
for (let i = 0; i < str1.length; i++) {
for (let j = 0; j < str2.length; j++) {
if (str1[i] === str2[j]) {
final += str1[i]
}
}
}
return final
}
console.log(subStr(x, y)) // => ABconst x = 'ABCD'
const y = 'AHOB'
function subStr(str1, str2) {
let final = ''
for (let i = 0; i < str1.length; i++) {
for (let j = 0; j < str2.length; j++) {
if (str1[i] === str2[j]) {
final += str1[i]
}
}
}
return final
}
console.log(subStr(x, y)) // => ABconst x = 'ABCD'
const y = 'AHOB'
function subStr(str1, str2) {
let final = ''
for (let i = 0; i < str1.length; i++) {
for (let j = 0; j < str2.length; j++) {
if (str1[i] === str2[j]) {
final += str1[i]
}
}
}
return final
}
console.log(subStr(x, y)) // => ABjavascript algorithm strings
javascript algorithm strings
edited Dec 26 at 5:40
200_success
128k15150412
128k15150412
asked Dec 26 at 4:58
SakoBu
1211
1211
2
Could you clarify, with additional examples, what should happen when letters appear in different orders within the two input strings?
– 200_success
Dec 26 at 5:41
add a comment |
2
Could you clarify, with additional examples, what should happen when letters appear in different orders within the two input strings?
– 200_success
Dec 26 at 5:41
2
2
Could you clarify, with additional examples, what should happen when letters appear in different orders within the two input strings?
– 200_success
Dec 26 at 5:41
Could you clarify, with additional examples, what should happen when letters appear in different orders within the two input strings?
– 200_success
Dec 26 at 5:41
add a comment |
1 Answer
1
active
oldest
votes
I know the root of all evil is premature optimization, but I would first ask if this is expected to be either a hotspot or usef with large strings.
Because it can be made much more readable using the array methods, but doing so obviously comes with a performance cost. OTOH, your method has its own performance issues.
If this isn’t expected to be particularly performance sensitive, I think that a straightforward method that turned the two strings into arrays then used the filter or map method to generate an array that is then turned into a string would be much more readable, and I prefer readable over performant as long as the performance isn’t a problem.
One additional point, what should your function return for “a”, “aa”? currently it returns “aa”?
That would make a nice one-liner:common = (str1, str2) => str1.split('').filter(s => str2.contains(s)).join('')
– morbusg
2 days ago
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f210341%2fform-a-string-consisting-of-the-common-letters-that-appear-in-two-input-strings%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I know the root of all evil is premature optimization, but I would first ask if this is expected to be either a hotspot or usef with large strings.
Because it can be made much more readable using the array methods, but doing so obviously comes with a performance cost. OTOH, your method has its own performance issues.
If this isn’t expected to be particularly performance sensitive, I think that a straightforward method that turned the two strings into arrays then used the filter or map method to generate an array that is then turned into a string would be much more readable, and I prefer readable over performant as long as the performance isn’t a problem.
One additional point, what should your function return for “a”, “aa”? currently it returns “aa”?
That would make a nice one-liner:common = (str1, str2) => str1.split('').filter(s => str2.contains(s)).join('')
– morbusg
2 days ago
add a comment |
I know the root of all evil is premature optimization, but I would first ask if this is expected to be either a hotspot or usef with large strings.
Because it can be made much more readable using the array methods, but doing so obviously comes with a performance cost. OTOH, your method has its own performance issues.
If this isn’t expected to be particularly performance sensitive, I think that a straightforward method that turned the two strings into arrays then used the filter or map method to generate an array that is then turned into a string would be much more readable, and I prefer readable over performant as long as the performance isn’t a problem.
One additional point, what should your function return for “a”, “aa”? currently it returns “aa”?
That would make a nice one-liner:common = (str1, str2) => str1.split('').filter(s => str2.contains(s)).join('')
– morbusg
2 days ago
add a comment |
I know the root of all evil is premature optimization, but I would first ask if this is expected to be either a hotspot or usef with large strings.
Because it can be made much more readable using the array methods, but doing so obviously comes with a performance cost. OTOH, your method has its own performance issues.
If this isn’t expected to be particularly performance sensitive, I think that a straightforward method that turned the two strings into arrays then used the filter or map method to generate an array that is then turned into a string would be much more readable, and I prefer readable over performant as long as the performance isn’t a problem.
One additional point, what should your function return for “a”, “aa”? currently it returns “aa”?
I know the root of all evil is premature optimization, but I would first ask if this is expected to be either a hotspot or usef with large strings.
Because it can be made much more readable using the array methods, but doing so obviously comes with a performance cost. OTOH, your method has its own performance issues.
If this isn’t expected to be particularly performance sensitive, I think that a straightforward method that turned the two strings into arrays then used the filter or map method to generate an array that is then turned into a string would be much more readable, and I prefer readable over performant as long as the performance isn’t a problem.
One additional point, what should your function return for “a”, “aa”? currently it returns “aa”?
answered Dec 26 at 13:16
jmoreno
1,163612
1,163612
That would make a nice one-liner:common = (str1, str2) => str1.split('').filter(s => str2.contains(s)).join('')
– morbusg
2 days ago
add a comment |
That would make a nice one-liner:common = (str1, str2) => str1.split('').filter(s => str2.contains(s)).join('')
– morbusg
2 days ago
That would make a nice one-liner:
common = (str1, str2) => str1.split('').filter(s => str2.contains(s)).join('')– morbusg
2 days ago
That would make a nice one-liner:
common = (str1, str2) => str1.split('').filter(s => str2.contains(s)).join('')– morbusg
2 days ago
add a comment |
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f210341%2fform-a-string-consisting-of-the-common-letters-that-appear-in-two-input-strings%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
Could you clarify, with additional examples, what should happen when letters appear in different orders within the two input strings?
– 200_success
Dec 26 at 5:41