Advertisement
Guest User

Untitled

a guest
Oct 7th, 2015
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.76 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "bufio"
  5. "fmt"
  6. "os"
  7. )
  8.  
  9. func Reverse(a []byte) {
  10. n := len(a)
  11. for j := 0; j < n/2; j++ {
  12. tmp := a[j]
  13. a[j] = a[n-j-1]
  14. a[n-j-1] = tmp
  15. }
  16. }
  17.  
  18. func NextPerm(sPtr *string) string {
  19. b := []byte(*sPtr)
  20.  
  21. n := len(b)
  22. for i := n - 2; i >= 0; i-- {
  23. if b[i] < b[i+1] {
  24. // Find the last element that is greater than b[i]
  25. nextMin := n - 1
  26. for ; b[nextMin] <= b[i]; nextMin-- {
  27. }
  28.  
  29. // swap i, nextMin
  30. tmp := b[i]
  31. b[i] = b[nextMin]
  32. b[nextMin] = tmp
  33.  
  34. // reverse i+1 .. n
  35. Reverse(b[i+1 : n])
  36.  
  37. return string(b)
  38. }
  39. }
  40.  
  41. return "no answer"
  42. }
  43.  
  44. func main() {
  45. in := bufio.NewReader(os.Stdin)
  46.  
  47. var t int
  48. fmt.Fscanf(in, "%d\n", &t)
  49.  
  50. for ; t > 0; t-- {
  51. var s string
  52. fmt.Fscanf(in, "%s\n", &s)
  53.  
  54. fmt.Println(NextPerm(&s))
  55. }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement