这是我试图编写代码的问题。
考虑一个递归算法,它将两个字符串 s1 和 s2 作为输入,并检查这些字符串是否彼此的字谜,因此如果前者中包含的所有字母在后者中出现相同的次数,反之亦然(即 s2 是 s1 的排列)。
例如:
如果s1 = "elevenplustwo"和s2 = "twelveplusone",则输出为true 如果s1 = "amina"和s2 = "minia",则输出为false 提示:考虑s1的第一个字符c=s1(0)和r=s1.substring(1,s1.size)的其余部分。关于c和r,s2必须(recursively)满足什么条件?
以下是我编写的解决此问题的代码。该代码在字符串中没有重复字符时工作得很好。例如,对于amin和mina,它可以正常工作。但是,当有重复字符时,例如amina和maina,它就无法正常工作了。
如何解决这个问题?
考虑一个递归算法,它将两个字符串 s1 和 s2 作为输入,并检查这些字符串是否彼此的字谜,因此如果前者中包含的所有字母在后者中出现相同的次数,反之亦然(即 s2 是 s1 的排列)。
例如:
如果s1 = "elevenplustwo"和s2 = "twelveplusone",则输出为true 如果s1 = "amina"和s2 = "minia",则输出为false 提示:考虑s1的第一个字符c=s1(0)和r=s1.substring(1,s1.size)的其余部分。关于c和r,s2必须(recursively)满足什么条件?
以下是我编写的解决此问题的代码。该代码在字符串中没有重复字符时工作得很好。例如,对于amin和mina,它可以正常工作。但是,当有重复字符时,例如amina和maina,它就无法正常工作了。
如何解决这个问题?
import scala.collection.mutable.ArrayBuffer
object Q32019 extends App {
def anagram(s1:String, s2:String, indexAr:ArrayBuffer[Int]):ArrayBuffer[Int]={
if(s1==""){
return indexAr
}
else {
val c=s1(0)
val s=s1.substring(1,s1.length)
val ss=s2
var count=0
for (i<-0 to s2.length-1) {
if(s2(i)==c && !indexAr.contains(s2.indexOf(c))) {
indexAr+=i
}
}
anagram(s,s2,indexAr)
}
indexAr
}
var a="amin"
var b="mina"
var c=ArrayBuffer[Int]()
var d=anagram(a,b,c)
println(d)
var check=true
var i=0
while (i<a.length && check){
if (d.contains(i) && a.length==b.length) check=true
else check=false
i+=1
}
if (check) println("yes they are anagram")
else println("no, they are not anagram")
}