Reverse words inside an array of characters without creating an extra array.
public int reverseW(char[] seq) {
		    int point =0, left = 0, right = 0;
		    char tmp = '\0';

		    while(point < seq.length) {
		      if(seq[point] == ' ' || point == seq.length-1) {
		        if(seq[point] == ' ') right = point-1;
		        else right = point;
		        while(left < right) {
		          tmp = seq[left];
		          seq[left] = seq[right];
		          seq[right] = tmp;
		          left++;
		          right--;
		        }        
		        left = point+1;        
		      }
		      point++;
		    }  

		    System.out.println(Arrays.toString(seq));
		    return 0;
	  }	  
	  
	  public int lengthOfLastWord(String s) {
		    // leetcode #67
		    String part = s.trim();
		    part = part.substring(part.lastIndexOf(" ")+1, part.length());
		    return part.length();
		    
		    
	  }	  
      
      public int lengthOfLongestSubstring(String s) {
    	    int count = 0, tc = 0;
    	    Map<Character, Integer> map = new HashMap<>();
    	    for (int i = 0; i < s.length(); i++) {
    	      char c = s.charAt(i);      
    	      if(map.containsKey(c)) {
    	        if(tc > count) count = tc;
    	        tc=0;
    	        i = map.get(c);
    	        map.clear();        
    	      } else {
    	        map.put(c, i);
    	        tc++;
    	      }
    	    }
    	    if(tc > count) count = tc;
    	    return count;
    	    
      }      
      
      public String longestPalindrome(String s) {
    	    int count = 0, tc = 0, pos = 0;    	    

    	    for (int i = 0; i < s.length()*2 ; i++) {
    	      int rc = 0;
    	      int lc = 0;

    	      if(i%2 == 0) {
    	      // letter in the middle  
    	        lc = i/2 - 1;
    	        rc = i/2 + 1;
    	        tc = 1;
    	      } else {
    	      // no letter in the middle  
    	        lc = i/2;
    	        rc = i/2 + 1;
    	        tc = 0;
    	      }

    	      while(lc >= 0 && rc <s.length() && s.charAt(lc) == s.charAt(rc)) {
    	        lc--;
    	        rc++;
    	        tc = tc+2;        
    	      }
    	    if(tc > count) {
    	      
    	      count = tc;  
    	      pos = lc+1;
    	      }  
    	    }
    	    return s.substring(pos,pos+count);    	    
    	    
      }      
      
      public String convertFromZigZag(String s, int numRows) {
    	    ArrayList<Integer>[] hlp = new ArrayList[numRows];

    	    for(int j=0;j<numRows;j++)
    	      hlp[j] = new ArrayList<Integer>();
    	    
    	    int row = 0;
    	    int way = 1;
    	    for(int i = 0; i < s.length(); i++) {
    	      hlp[row].add(i);
    	      if(row == numRows-1) way = -1;
    	      else if(row == 0) way = 1;
    	      row = row + way;      
    	    } 
    	    ArrayList<Integer> merged = new ArrayList<Integer>(); 
    	    for(int j=0;j<numRows;j++)
    	      merged.addAll(hlp[j]);

    	    char res[] = new char[s.length()];
    	    int cnt = 0;
    	    for(int i : merged) {
    	      res[i] = s.charAt(cnt);
    	      cnt++;
    	    }  
    	    System.out.println(Arrays.toString(res));
    	    return new String(res);
    	    
      }