package com.interview.string; public class CycleLeaderIteration { //assumption that size is going to be 3^k +1 from start to end public void iterate(char str[],int start,int end){ int len = end - start +1; int power = 1; while(power < len){ int index = power; int newIndex = -1; char temp = str[start+index]; char temp1; while(newIndex != power){ if(index % 2 ==0){ newIndex = index/2; }else{ newIndex = len/2 + index/2; } temp1 = str[start + newIndex]; str[start+newIndex] = temp; temp = temp1; index = newIndex; } power = power*3; } } public static void main(String args[]){ String str = "1a2b3c4d5e6f7g8h9iAjBkClDmEn"; char[] str1 = str.toCharArray(); CycleLeaderIteration cli = new CycleLeaderIteration(); cli.iterate(str1, 0, str1.length); for(char ch: str1){ System.out.print(ch + " "); } } }