这是来自在线编码挑战之一的问题(已完成)。
我只需要一些关于如何处理的逻辑。
问题陈述:
我们有两个字符串 A 和 B 具有相同的超级字符集。我们需要改变这些字符串以获得两个相等的字符串。在每一步中,我们可以执行以下操作之一:
1. swap two consecutive characters of a string
2. swap the first and the last characters of a string
可以在任一字符串上执行移动。为了获得两个相等的字符串,我们需要
的最小移动次数是多少?
输入格式和约束:输入
的第一行和第二行包含两个字符串 A 和 B。保证它们的字符相等的超集。
1 <= length(A) = length(B) <= 2000
All the input characters are between 'a' and 'z'
输出格式:将最小
移动次数
打印到输出的唯一行
Sample input:
aab
baa
Sample output:
1
解释:
交换字符串 aab 的第一个和最后一个字符以将其转换为 baa。现在两个字符串相等。
编辑:这是我的第一次尝试,但我得到了错误的输出。有人可以指导我的方法有什么问题。
int minStringMoves(char* a, char* b) {
int length, pos, i, j, moves=0;
char *ptr;
length = strlen(a);
for(i=0;i<length;i++) {
// Find the first occurrence of b[i] in a
ptr = strchr(a,b[i]);
pos = ptr - a;
// If its the last element, swap with the first
if(i==0 && pos == length-1) {
swap(&a[0], &a[length-1]);
moves++;
}
// Else swap from current index till pos
else {
for(j=pos;j>i;j--) {
swap(&a[j],&a[j-1]);
moves++;
}
}
// If equal, break
if(strcmp(a,b) == 0)
break;
}
return moves;
}