是的,有存在O(N)解決方案,這裏是Java實現:
private static void swap(int[] idx, char[] c, int i) {
idx[c[i]-'0'] = 0;
idx[c[0]-'0'] = i;
char tc = c[0];
c[0] = c[i];
c[i] = tc;
}
public static void permutation(final String from, final String to) {
final int[] idx = new int[10];
final char[] c1 = from.toCharArray();
final char[] c2 = to.toCharArray();
for (int i = 0; i < c1.length; i++) {
idx[c1[i] - '0'] = i;
}
for (int i=(c1.length-1); i>=0; i--) {
if (c2[i] != c1[i]) {
final int charIdx = idx[c2[i]-'0'];
if (charIdx != 0) {
// move char to index 0
swap(idx, c1, charIdx);
}
// move char from 0 to i;
swap(idx, c1, i);
}
}
}