Javascript 检查第二个字符串是否是另一个字符串的旋转
我正在尝试编写一个函数,它接受两个字符串参数,并检查第二个参数是否是第一个字符串的旋转版本 因此,结果如下: 选中旋转字符串'waterbottle','lewaterbott';//符合事实的 选中旋转字符串“水瓶”、“瓶装水”;//符合事实的 选中旋转字符串'waterbottle'、'erbottlewat';//符合事实的 选中旋转字符串'waterbottle'、'lewaterbottx';//假的 我编写了以下代码,但有些边缘情况我似乎无法理解: 函数检查RotationString,rotatedString{ 让结果; 让我们来检查一下 让stringArr=string.split; 让rotatedStringArr=rotatedString.split 对于let i=0;iJavascript 检查第二个字符串是否是另一个字符串的旋转,javascript,algorithm,Javascript,Algorithm,我正在尝试编写一个函数,它接受两个字符串参数,并检查第二个参数是否是第一个字符串的旋转版本 因此,结果如下: 选中旋转字符串'waterbottle','lewaterbott';//符合事实的 选中旋转字符串“水瓶”、“瓶装水”;//符合事实的 选中旋转字符串'waterbottle'、'erbottlewat';//符合事实的 选中旋转字符串'waterbottle'、'lewaterbottx';//假的 我编写了以下代码,但有些边缘情况我似乎无法理解: 函数检查RotationStrin
console.logcheckRotationString'waterbottle'、'ttletwaterb';//false这是一个有点奇怪的解决方案,因为它只对索引参数使用了一些。但在某些情况下,每次迭代都只是比较两个字符串,一个是第一个字符串的旋转,另一个是第二个字符串 常量checkRotationString=str,rot=> str.split.somes,i=>str.slicei+str.slice0,i==rot; [ ['waterbottle','lewaterbott',//true ['waterbottle'、'瓶装水'],//正确 ['waterbottle','Erbottlewat'],//假-原件 ['waterbottle','erbottlewat',//true-已更正 ['waterbottle','lewaterbottx']//false
].forEach[s,r]=>console.log`${s},'${r}':${checkRotationStringss,r}`这是一个有点奇怪的解决方案,因为它只对索引参数使用了一些。但在某些情况下,每次迭代都只是比较两个字符串,一个是第一个字符串的旋转,另一个是第二个字符串 常量checkRotationString=str,rot=> str.split.somes,i=>str.slicei+str.slice0,i==rot; [ ['waterbottle','lewaterbott',//true ['waterbottle'、'瓶装水'],//正确 ['waterbottle','Erbottlewat'],//假-原件 ['waterbottle','erbottlewat',//true-已更正 ['waterbottle','lewaterbottx']//false
].forEach[s,r]=>console.log`${s},'${r}':${checkRotationStringss,r}`您可以对字母进行计数,而不是尝试将其分成随机片段并进行不同的检查。这将简单得多: const countLetters=a=>Array.prototype.reduce.calla,r,l=>Object.assignr,{[l]:r[l]||0+1},{}; 函数检查旋转字符串A、b{ const countA=countlettsa; const countB=countletsb; 返回Object.keyscountA.length==Object.keyscountB.length &&Object.entriescoounta.every[key,value]=>value==countB[key]; } //测验 [['waterbottle','lewaterbott'],['waterbottle','瓶装水'],['waterbottle','erbottlewat'],['waterbottle','lewaterbottx']
.forEacha=>console.loga,选中rotatedstring.applynull,a 你们可以做一个字母计数,而不是试图把它分成随机的碎片并进行不同的检查。这将简单得多: const countLetters=a=>Array.prototype.reduce.calla,r,l=>Object.assignr,{[l]:r[l]||0+1},{}; 函数检查旋转字符串A、b{ const countA=countlettsa; const countB=countletsb; 返回Object.keyscountA.length==Object.keyscountB.length &&Object.entriescoounta.every[key,value]=>value==countB[key]; } //测验 [['waterbottle','lewaterbott'],['waterbottle','瓶装水'],['waterbottle','erbottlewat'],['waterbottle','lewaterbottx']
.forEacha=>console.loga,选中rotatedstring.applynull,a 可以使用子字符串并旋转,直到找到匹配项。像这样: 函数检查RotationString,rotatedString{ 让match=false; 对于let i=0; i
checkRotationStrings(str1: string, str2: string) {
if (str1.length !== str2.length) {
return false;
} else {
for (var i = 0; i < str2.length; i++) {
if (str2[i] === str1[0]) {
var substring1 = str2.substring(0,i);
var substring2 = str2.substring(i,str2.length);
var concatWord = substring2.concat(substring1);
if(str1 === concatWord){
console.log(str1 + " matches " + concatWord)
return true;
}else{
console.log(str1 + " not matches " + concatWord)
}
}
}
return false;
}
}
您可以执行以下操作:
checkRotationStrings(str1: string, str2: string) {
if (str1.length !== str2.length) {
return false;
} else {
for (var i = 0; i < str2.length; i++) {
if (str2[i] === str1[0]) {
var substring1 = str2.substring(0,i);
var substring2 = str2.substring(i,str2.length);
var concatWord = substring2.concat(substring1);
if(str1 === concatWord){
console.log(str1 + " matches " + concatWord)
return true;
}else{
console.log(str1 + " not matches " + concatWord)
}
}
}
return false;
}
}
堆栈溢出问题通常会以全新的代码和/或如何实现预期结果的想法的形式得到答案。通常,至少会有人试图帮助发问者回答他们的实际问题,在本例中,这似乎是在向您的代码寻求帮助。正如您所评论的,至少有一个问题与切片有关 如果我特别喜欢的话,我也喜欢提供新的代码或想法,所以我在这里只提出了部分批评意见,但到目前为止,我的答案与这个问题完全没有关联 检查字符串旋转的方法没有问题。您只是有几个bug: 首先,由于rotationCheck旨在旋转字符串,以便将其与rotatedString进行比较,因此可以反转字符串构建。应该是:
rotationCheck = result.concat(stringArr.slice(0, i)).join('');
其次,一旦构建了旋转检查,就需要将其与rotatedString(而不是string)进行比较。因此:
堆栈溢出问题通常会以全新的代码和/或如何实现预期结果的想法的形式得到答案。通常,至少会有人试图帮助发问者回答他们的实际问题,在本例中,这似乎是在向您的代码寻求帮助。正如您所评论的,至少有一个问题与切片有关 如果我特别喜欢的话,我也喜欢提供新的代码或想法,所以我在这里只提出了部分批评意见,但到目前为止,我的答案与这个问题完全没有关联 检查字符串旋转的方法没有问题。您只是有几个bug: 首先,由于rotationCheck旨在旋转字符串,以便将其与rotatedString进行比较,因此可以反转字符串构建。应该是:
rotationCheck = result.concat(stringArr.slice(0, i)).join('');
其次,一旦构建了旋转检查,就需要将其与rotatedString(而不是string)进行比较。因此:
哪一个边是大小写?例如,我正在断开字符串,在原始字符串中找到旋转字符串中的第一个字母。让我们假设它是水瓶和水瓶。字母t将首先出现在索引2中,而不是我要切分的索引7中true应该是False我建议避免使用string作为变量名,因为它与对象非常接近。这里有哪些边的大小写?例如,我将在原始字符串中找到rotatedString中的第一个字母的位置断开字符串。让我们假设它是水瓶和水瓶。字母t将首先出现在索引2中,而不是我要切分的索引7中true应该是False我建议避免使用字符串作为变量名,因为它非常接近对象。旋转+旋转是如何工作的?不:检查旋转字符串“at”,“waterbottle”嗯,很有趣。旋转+旋转是如何工作的?否:checkRotationString'at','waterbottle'否:checkRotatedString'watterbotle','waterbottle'这甚至是一个有效的比较。除了无效的大小写外,他的例子中没有一个提到字母比原来的多/少。字母完全相同,只是排列方式不同。不:checkRotatedString'watterbotle','waterbottle'是一个有效的比较。他的例子中没有一个提到字母比原来的多/少,除了无效的大小写。字母完全一样,只是排列方式不同。这让我想起我是多么讨厌这个名字。它真的应该是任何。我不知道为什么我对这件事有强烈的感觉!这让我想起我是多么讨厌这个名字。它真的应该是任何。我不知道为什么我对这件事有强烈的感觉!