Wednesday, April 30, 2014

Reverse a string without reversing the words and trim extra space

Input: "   MY NAME IS      ABHINAV   "
Output: "ABHINAV IS NAME MY"

public class ReverseString {
    static String str = "   MY NAME IS      ABHINAV   ";
    static char s[]  = str.toCharArray();

   static void reverse( int startIndex, int endIndex){
 
     for(int i=startIndex;i<(endIndex/2);i++){
       char c = s[i];
       s[i] = s[endIndex-i-1];
       s[endIndex-i-1] = c;
     }
 }

 static int leadingSpaceIndex(){
    int i = 0;
    while (s[i++] == ' ');
    return (i-1);
 }

static int trailingSpaceIndex(){
  int i = s.length;
  while (s[--i] == ' ');
  return i;
}

static int trim(int leadingSpace,int  trailingSpace){
  int place = leadingSpace;
  for (int i=leadingSpace;i<(trailingSpace+1);i++){
   if (s[i] != ' '){
     s[i-place] = s[i];
     s[i] = ' ';
   }else{
    while (s[i+1] == ' '){
      i = i+1;
      place++;
    }
   }
  }
  return 0;
 }
 public static void main(String args[]){
 
  
  int leadingIndex = leadingSpaceIndex();
  int trailingIndex = trailingSpaceIndex();
 
  reverse(0, s.length);
 
 
  int i = 0, index =0;
 
  while ( i < s.length){
   if (s[i] == ' ' || s[i] == '\0'){
    reverse( index, (index+i));
    index = i+1;
   }
   i++;
  
  }
//  int leadingIndex = leadingSpaceIndex();
  System.out.println("pre final string "+ new String(s));
  trim(leadingIndex, trailingIndex);
  System.out.println("final string "+ new String(s));
  
 }
}

No comments:

Post a Comment