我正在解决一个练习问题,我的代码应接受两个参数(str1,str2)
并根据str2
对str1
应用旋转>。每次应用旋转后,旋转字符串的第一个字母应添加到新字符串中。在所有旋转之后,如果新字符串是原始字符串的任何子字符串的字谜,代码应返回“YES”,否则应返回“NO”。
例如,如果参数如下:("abcde","L 3 R 2 R 4")
输出将为 YES
说明:此处,旋转次数为 3。 应用第一次旋转 L 3 后,字符串为: 'deabc'。这里,第一个字符是“d” 应用第二次旋转 R2 后,字符串为: 'bcdea'。这里,第一个字符是“b” 应用第三次旋转 R 4 后,字符串为: 'cdeab'。这里,第一个字符是“c”
因此,在所有旋转之后,新字符串将是“dbc”,它是原始字符串“abcde”的子字符串的字谜。
function anagram(str1,str2){
var i=0 , j = 2 , temp = [] , final = [] , input = str1;
while(j<str2.length){
if(str2[i]==='L'){ //left rotation
for(let k=input.length-parseInt(str2[j])+1 ; k<input.length ; k++){
temp.push(input[k]);
}
for(let l=0 ; l<input.length-parseInt(str2[j])+1; l++){
temp.push(input[l]);
}
final.push(temp[0]);
}
if(str2[i]==='R'){ //right rotation
for(let m=input.length-parseInt(str2[j]) ; m<input.length; m++){
temp.push(input[m]);
}
for(let n=0 ; n< input.length-parseInt(str2[j]); n++){
temp.push(input[n]);
}
final.push(temp[0]);
}
input = temp ;
temp = [];
i += 4;
j += 4;
}
var a=0, b=final.length-1 ; //anagram detection
while(b<str1.length){
if(str1.slice(a,b+1).split('').sort().join('')===final.sort().join('')){
return "YES"}
a++;
b++;
}
return "NO";
}
代码仅返回“NO”。我该如何解决这个问题?
最佳答案
您的代码应该可以工作。
我只是将提供的代码复制/粘贴到新文件中。调用 anagram("abcde", "L 3 R 2 R 4")
返回 YES
。确保检查所有常规内容:
- 您保存文件了吗?
- 如果您从浏览器运行代码,您是否刷新了页面?如果这样做了,您需要清除缓存吗?
- 一般来说,请确保您正在运行最新的代码:如果您将
console.log("TEST");
放在函数的开头,那么当您运行代码时它会打印出来吗?像这样的调试语句是救星。
我发现“没有重新加载代码”是一个非常常见的问题(至少对我来说)!
关于javascript - 字符串旋转和字谜检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56974212/