AlgoDesign

Next greater permutation

1def biggerIsGreater(w):
2  # Write your code here
3  # traverse from right to left using i looking for a decrease using ord, if no decrease is found, return "no answer", store as ele
4  # if a decrease is found, find the first element greater than ele going from right, swap them
5  # reverse the elements from the ele to the right
6  w = list(w)
7  ele, index = None, None
8  for i in range(len(w) - 1, 0, -1):
9    if ord(w[i - 1]) < ord(w[i]): 
10      ele = w[i - 1]
11      index = i - 1
12      break
13  if not ele: return "no answer"
14  
15  rightEle, rightIndex = None, None
16  for i in range(len(w) - 1, index, -1):
17    if ord(w[i]) > ord(ele):
18      rightEle = w[i]
19      rightIndex = i
20      break
21          
22          
23  w[index], w[rightIndex] = w[rightIndex], w[index]
24  res = list(w[:index + 1]) + list(reversed(w[index + 1::]))
25  return "".join(res)