我遇到了一个看似很简单的问题,但是当我编写更多代码时,我的预期收益有些不像我预期的那样。
感谢您的帮助。如果您确实提供了任何帮助,请说明您的方法以及我如何陷入困境。
我们得到了一个字符串,需要查看它是否可以从字典数组中分解为单词。例如:
const str = "applecomputer"; const dictArr = ["apple", "computer"]; stringBreakdown(str, dictArr); // true
假设字典数组中没有重复项,您是否可以编写一个方法,如果可以将字符串分解为数组中的单词,该方法将返回true;否则,将返回false?
Expect stringBreakdown('crazyrichasians', [ 'crazy', 'rich', 'asians' ]) // to return true
Expect stringBreakdown('lockcombination', [ 'lock', 'combo' ]) // to return false
const stringBreakdown = (str, dictArr)=> {
let hashDictionary = {};
let shouldRemoveWord
for(let x = 0; x <= str.length-1;x++){
!hashDictionary[str[x]] ? hashDictionary[str[x]] =1 : hashDictionary[str[x]]+=1
}
for(let y = 0; y < dictArr.length;y++ ){
shouldRemoveWord = removeLetters(hashDictionary,dictArr[y])
if(shouldRemoveWord === true){
dictArr.splice(y,1)
}
}
console.log('dictArr',dictArr)
return dictArr.length > 0 ? true : false;
}
const removeLetters = (hash,word) =>{
let modifiedWord = word.split('')
for(let k = 0; k < modifiedWord.length;k++){
if(hash[word[k]]){
modifiedWord.splice(k,1)
hash[word[k]]-=1
}
}
return modifiedWord.join('').length < 0 ? true : false;
}
答案 0 :(得分:1)
简单地遍历字典
File "main.py", line 156, in scrape_years
'reviewBodyCell').find_element_by_tag_name('p')
答案 1 :(得分:1)
您可以遍历数组中提供的每个单词,然后:
首先,检查组合在一起的所有单词的长度是否与被测字符串的长度匹配。如果没有返回false
。
第二,如果长度匹配,则检查是否每个单词作为一个整体包含在所提供的字符串中作为子字符串:
function stringBreakdown(str, dictArr){
return dictArr.join("").length === str.length
&&
dictArr.every(word => str.includes(word));
}
//tests
console.log(stringBreakdown('crazyrichasians', [ 'crazy', 'rich', 'asians' ]));
console.log(stringBreakdown('lockcombination', [ 'lock', 'combo' ]));
console.log(stringBreakdown('applecomputer', [ 'apple', 'computer']));
console.log(stringBreakdown('appelcomputer', [ 'apple', 'computer']));
console.log(stringBreakdown('appcolemputer', [ 'apple', 'computer']));
console.log(stringBreakdown('applecomputer', [ 'app', 'le', 'computer']));
您的方法是可疑的,因为当您逐个字符地浏览每个字符时,您不会查看它形成的单词,即在您的情况下,如果applecomputer
是字符串并且数组具有['appel','comterpu' ]在这种情况下,您的算法将返回true
。
这是因为您要根据输入字符串str
创建一个字符映射,然后遍历每个单词的字符并递减每个字符在字符映射中的出现,因此组合无关紧要。
const stringBreakdown = (str, dictArr)=> {
let hashDictionary = {};
let shouldRemoveWord
for(let x = 0; x <= str.length-1;x++){
!hashDictionary[str[x]] ? hashDictionary[str[x]] =1 : hashDictionary[str[x]]+=1
}
for(let y = 0; y < dictArr.length;y++ ){
shouldRemoveWord = removeLetters(hashDictionary,dictArr[y])
if(shouldRemoveWord === true){
dictArr.splice(y,1)
}
}
return dictArr.length > 0 ? true : false;
}
const removeLetters = (hash,word) =>{
let modifiedWord = word.split('')
for(let k = 0; k < modifiedWord.length;k++){
if(hash[word[k]]){
modifiedWord.splice(k,1)
hash[word[k]]-=1
}
}
return modifiedWord.join('').length < 0 ? true : false;
}
//doesn't work outputs true
console.log(stringBreakdown('applecomputer', ['appel', 'computer']));