【发布时间】:2019-11-20 06:54:49
【问题描述】:
我正在解决一个练习题,我的代码应该接受两个参数(str1,str2) 并根据str2 在str1 上应用轮换。应用每次旋转后,应将旋转字符串的第一个字母添加到新字符串中。在所有旋转之后,如果新字符串是原始字符串的任何子字符串的变位词,则代码应返回“YES”,否则应返回“NO”。
例如,如果这些是参数:("abcde","L 3 R 2 R 4") 输出将为 YES
解释:这里,旋转次数为 3。 应用第一次旋转 L 3 后,字符串为: 'deabc'。在这里,第一个字符是 'd' 应用第二次旋转 R 2 后,字符串为: '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”。我该如何解决这个问题?
【问题讨论】:
标签: javascript string