Javascript 中的字符串匹配挑战
String Match challenge in Javascript
如果有人可以指出或只是提供线索我做错了什么,将不胜感激。所以任务是:
Given 2 strings, a and b, return the number of the positions where
they contain the same length 2 substring. So "xxcaazz" and "xxbaaz"
yields 3, since the "xx" "xx", "aa", and "az" substrings appear in the
same place in both strings.
function('xxcaazz', 'xxbaaz') should return 3
function('abc', 'abc') should return 2
function('abc', 'axc') should return 0
我的代码:
function stringMatch(a, b){
// convert both strings to arrays with split method
let arrA = a.split("")
let arrB = b.split("")
// create 2 empty arrays to feel in with symbol combinations
let arrOne = [];
let arrTwo = [];
// loop through the first array arrA and push elements to empty arrayOne
for ( let i = 0; i < arrA.length ; i++ ) {
arrOne.push(arrA[i]+arrA[i+1])
}
// loop through the first array arrB and push elements to empty arrayTwo
for ( let i = 0; i < arrB.length ; i++ ) {
arrTwo.push(arrB[i]+arrB[i+1])
}
// create a new array of the matching elements from arrOne and arrTwo
let newArray = arrOne.filter(value => arrTwo.includes(value))
// return the length 0f the newArray - that's supposed to be the answer
return newArray.length
}
感谢帮助!
在循环的最后一次迭代中,不会有“下一个”字符,arrB[i+1]
将是未定义的。解决这个问题的最简单方法是只循环到 倒数第二个 字符,或者直到 i < arrB.length - 1
.
for ( let i = 0; i < arrB.length - 1; i++ ) {
arrTwo.push(arrB[i]+arrB[i+1])
}
例如...
console.log(stringMatch('xxcaazz', 'xxbaaz')); //should return 3
console.log(stringMatch('abc', 'abc')); // should return 2
console.log(stringMatch('abc', 'axc')); //should return 0
function stringMatch(a, b){
// convert both strings to arrays with split method
let arrA = a.split("")
let arrB = b.split("")
// create 2 empty arrays to feel in with symbol combinations
let arrOne = [];
let arrTwo = [];
// loop through the first array arrA and push elements to empty arrayOne
for ( let i = 0; i < arrA.length -1 ; i++ ) {
arrOne.push(arrA[i]+arrA[i+1])
}
// loop through the first array arrB and push elements to empty arrayTwo
for ( let i = 0; i < arrB.length - 1; i++ ) {
arrTwo.push(arrB[i]+arrB[i+1])
}
// create a new array of the matching elements from arrOne and arrTwo
let newArray = arrOne.filter(value => arrTwo.includes(value))
// return the length 0f the newArray - that's supposed to be the answer
return newArray.length
}
作为奖励,这是我自己的解决方案...
console.log(stringMatch('xxcaazz', 'xxbaaz')); //should return 3
console.log(stringMatch('abc', 'abc')); // should return 2
console.log(stringMatch('abc', 'axc')); //should return 0
function stringMatch(a, b){
var matches = 0;
for(let i=a.length-1; i--;){
let s1 = a.substring(i, i+2);
let s2 = b.substring(i, i+2);
if(s1 == s2) matches++;
}
return matches;
}
如果有人可以指出或只是提供线索我做错了什么,将不胜感激。所以任务是:
Given 2 strings, a and b, return the number of the positions where they contain the same length 2 substring. So "xxcaazz" and "xxbaaz" yields 3, since the "xx" "xx", "aa", and "az" substrings appear in the same place in both strings.
function('xxcaazz', 'xxbaaz') should return 3
function('abc', 'abc') should return 2
function('abc', 'axc') should return 0
我的代码:
function stringMatch(a, b){
// convert both strings to arrays with split method
let arrA = a.split("")
let arrB = b.split("")
// create 2 empty arrays to feel in with symbol combinations
let arrOne = [];
let arrTwo = [];
// loop through the first array arrA and push elements to empty arrayOne
for ( let i = 0; i < arrA.length ; i++ ) {
arrOne.push(arrA[i]+arrA[i+1])
}
// loop through the first array arrB and push elements to empty arrayTwo
for ( let i = 0; i < arrB.length ; i++ ) {
arrTwo.push(arrB[i]+arrB[i+1])
}
// create a new array of the matching elements from arrOne and arrTwo
let newArray = arrOne.filter(value => arrTwo.includes(value))
// return the length 0f the newArray - that's supposed to be the answer
return newArray.length
}
感谢帮助!
在循环的最后一次迭代中,不会有“下一个”字符,arrB[i+1]
将是未定义的。解决这个问题的最简单方法是只循环到 倒数第二个 字符,或者直到 i < arrB.length - 1
.
for ( let i = 0; i < arrB.length - 1; i++ ) {
arrTwo.push(arrB[i]+arrB[i+1])
}
例如...
console.log(stringMatch('xxcaazz', 'xxbaaz')); //should return 3
console.log(stringMatch('abc', 'abc')); // should return 2
console.log(stringMatch('abc', 'axc')); //should return 0
function stringMatch(a, b){
// convert both strings to arrays with split method
let arrA = a.split("")
let arrB = b.split("")
// create 2 empty arrays to feel in with symbol combinations
let arrOne = [];
let arrTwo = [];
// loop through the first array arrA and push elements to empty arrayOne
for ( let i = 0; i < arrA.length -1 ; i++ ) {
arrOne.push(arrA[i]+arrA[i+1])
}
// loop through the first array arrB and push elements to empty arrayTwo
for ( let i = 0; i < arrB.length - 1; i++ ) {
arrTwo.push(arrB[i]+arrB[i+1])
}
// create a new array of the matching elements from arrOne and arrTwo
let newArray = arrOne.filter(value => arrTwo.includes(value))
// return the length 0f the newArray - that's supposed to be the answer
return newArray.length
}
作为奖励,这是我自己的解决方案...
console.log(stringMatch('xxcaazz', 'xxbaaz')); //should return 3
console.log(stringMatch('abc', 'abc')); // should return 2
console.log(stringMatch('abc', 'axc')); //should return 0
function stringMatch(a, b){
var matches = 0;
for(let i=a.length-1; i--;){
let s1 = a.substring(i, i+2);
let s2 = b.substring(i, i+2);
if(s1 == s2) matches++;
}
return matches;
}