Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查第二个字符串是否是另一个字符串的旋转_Javascript_Algorithm - Fatal编程技术网

Javascript 检查第二个字符串是否是另一个字符串的旋转

Javascript 检查第二个字符串是否是另一个字符串的旋转,javascript,algorithm,Javascript,Algorithm,我正在尝试编写一个函数,它接受两个字符串参数,并检查第二个参数是否是第一个字符串的旋转版本 因此,结果如下: 选中旋转字符串'waterbottle','lewaterbott';//符合事实的 选中旋转字符串“水瓶”、“瓶装水”;//符合事实的 选中旋转字符串'waterbottle'、'erbottlewat';//符合事实的 选中旋转字符串'waterbottle'、'lewaterbottx';//假的 我编写了以下代码,但有些边缘情况我似乎无法理解: 函数检查RotationStrin

我正在尝试编写一个函数,它接受两个字符串参数,并检查第二个参数是否是第一个字符串的旋转版本

因此,结果如下:

选中旋转字符串'waterbottle','lewaterbott';//符合事实的 选中旋转字符串“水瓶”、“瓶装水”;//符合事实的 选中旋转字符串'waterbottle'、'erbottlewat';//符合事实的 选中旋转字符串'waterbottle'、'lewaterbottx';//假的

我编写了以下代码,但有些边缘情况我似乎无法理解:

函数检查RotationString,rotatedString{ 让结果; 让我们来检查一下 让stringArr=string.split; 让rotatedStringArr=rotatedString.split 对于let i=0;i您可以使用with rotated和two作为参数,并检查with

函数检查旋转字符串,已旋转{ 返回string.length===rotated.length&&rotated.repeat2.includeString; } console.LogCheckRotationString'waterbottle'、'lewaterbott';//符合事实的 控制台。日志检查旋转串‘水瓶’、‘瓶装水’;//符合事实的 控制台。LogCheckRotationString'waterbottle'、'Erbottlewat';//错误的 console.LogCheckRotationString'waterbottle'、'lewaterbottx';//错误的 console.logcheckRotationString'waterbottle'、'ttletwaterb';//false您可以使用with rotated和two作为参数,并使用进行检查

函数检查旋转字符串,已旋转{ 返回string.length===rotated.length&&rotated.repeat2.includeString; } console.LogCheckRotationString'waterbottle'、'lewaterbott';//符合事实的 控制台。日志检查旋转串‘水瓶’、‘瓶装水’;//符合事实的 控制台。LogCheckRotationString'waterbottle'、'Erbottlewat';//错误的 console.LogCheckRotationString'waterbottle'、'lewaterbottx';//错误的
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; iconsole.LogCheckRotationString'waterbottle'、'lewaterbottx';//false可以使用子字符串并旋转,直到找到匹配项。像这样:

函数检查RotationString,rotatedString{ 让match=false; 对于let i=0; iconsole.LogCheckRotationString'waterbottle'、'lewaterbottx';//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;

    }


  }

您可以执行以下操作:

    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'是一个有效的比较。他的例子中没有一个提到字母比原来的多/少,除了无效的大小写。字母完全一样,只是排列方式不同。这让我想起我是多么讨厌这个名字。它真的应该是任何。我不知道为什么我对这件事有强烈的感觉!这让我想起我是多么讨厌这个名字。它真的应该是任何。我不知道为什么我对这件事有强烈的感觉!