classSolution{public:intkSimilarity(strings1,strings2){intans=0;queue<string>q{{s1}};unordered_set<string>seen{{s1}};while(!q.empty()){for(intsz=q.size();sz>0;--sz){stringcurr=q.front();q.pop();if(curr==s2)returnans;for(conststring&child:getChildren(curr,s2)){if(seen.count(child))continue;q.push(child);seen.insert(child);}}++ans;}return-1;}private:vector<string>getChildren(string&curr,conststring&target){vector<string>children;inti=0;// First index s.t. curr[i] != target[i]while(curr[i]==target[i])++i;for(intj=i+1;j<curr.length();++j)if(curr[j]==target[i]){swap(curr[i],curr[j]);children.push_back(curr);swap(curr[i],curr[j]);}returnchildren;}};
classSolution{publicintkSimilarity(Strings1,Strings2){intans=0;Queue<String>q=newArrayDeque<>(Arrays.asList(s1));Set<String>seen=newHashSet<>(Arrays.asList(s1));while(!q.isEmpty()){for(intsz=q.size();sz>0;--sz){finalStringcurr=q.poll();if(curr.equals(s2))returnans;for(finalStringchild:getChildren(curr,s2)){if(seen.contains(child))continue;q.offer(child);seen.add(child);}}++ans;}return-1;}privateList<String>getChildren(finalStringcurr,finalStringtarget){List<String>children=newArrayList<>();char[]charArray=curr.toCharArray();inti=0;// First index s.t. curr.charAt(i) != target.charAt(i)while(curr.charAt(i)==target.charAt(i))++i;for(intj=i+1;j<charArray.length;++j)if(curr.charAt(j)==target.charAt(i)){swap(charArray,i,j);children.add(String.valueOf(charArray));swap(charArray,i,j);}returnchildren;}privatevoidswap(char[]charArray,inti,intj){finalchartemp=charArray[i];charArray[i]=charArray[j];charArray[j]=temp;}}
classSolution:defkSimilarity(self,s1:str,s2:str)->int:ans=0q=deque([s1])seen={s1}whileq:for_inrange(len(q)):curr=q.popleft()ifcurr==s2:returnansforchildinself._getChildren(curr,s2):ifchildinseen:continueq.append(child)seen.add(child)ans+=1return-1def_getChildren(self,curr:str,target:str)->List[str]:children=[]s=list(curr)i=0# First index s.t. curr[i] != target[i]whilecurr[i]==target[i]:i+=1forjinrange(i+1,len(s)):ifs[j]==target[i]:s[i],s[j]=s[j],s[i]children.append(''.join(s))s[i],s[j]=s[j],s[i]returnchildren