Monday, November 15, 2010

permutation string, google interview

permutation using swap

void printPermutation(string s, int start, int n) {
  if (start>=n) { 
    cout< < s < < endl;
    return;
  }
  for (int i=start; i<n; ++i) {
    swap(s[start], s[i]);
    printPermutation(s, start+1, n);
    swap(s[start], s[i]);
  }
}




just need another line of check for duplicated character.
void printPermutation(string s, int start, int n) {
  if (start>=n) { 
    cout < < s < <endl;
    return;
  }
  for (int i=start; i < n; ++i) {
    if (s[i]==s[start] && (i!=start)) continue; // skip duplicate case
    swap(s[start], s[i]);
    printPermutation(s, start+1, n);
    swap(s[start], s[i]);
  }
}

No comments:

Post a Comment