Thursday, December 12, 2013

TOPCORDER SRM598 DIV1

The Question is


Problem Statement

     Fox Ciel received a string as a birthday present. However, the string was too long for her, so she decided to make it shorter by erasing some characters.

The erasing process will look as follows:
  1. Find the smallest i such that the i-th character and the (i+1)-th character of the string are same.
  2. If there is no such i, end the process.
  3. Remove the i-th and the (i+1)-th character of the string, and repeat from 1.


For example, if she receives "cieeilll", she will change the string as follows: "cieeilll" -> "ciilll" -> "clll" -> "cl". You are given a String s. Return the string she will get after she erases characters as described above.

Definition

    
Class: ErasingCharacters
Method: simulate
Parameters: String
Returns: String
Method signature: String simulate(String s)
(be sure your method is public)

Limits

    
Time limit (s): 2.000
Memory limit (MB): 64

Constraints

- s will contain between 1 and 50 characters, inclusive.
- Each character in s will be a lowercase letter ('a'-'z').

Examples

0)
    
"cieeilll"
Returns: "cl"
This is the example from the statement.
1)
    
"topcoder"
Returns: "topcoder"
She won't erase any characters at all.
2)
    
"abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba"
Returns: ""
3)
    
"bacaabaccbaaccabbcabbacabcbba"
Returns: "bacbaca"
4)
    
"eel"
Returns: "l"


My Solution is Below

public static String simulate(String str){
  int start =0;
 
  while(str.length()-1 >start){
   char firstChar = str.charAt(start);
//   System.out.println(firstChar + " : fisrt");
   char nextChar = str.charAt(start+1);
//   System.out.println(nextChar +" : next");
   if(firstChar == nextChar){
    str = str.substring(0, start) + str.substring(start+2, str.length());
//    System.out.println("complete:" + str);
    if(start !=0){
     start--;
    }
   }else{
    start++;
   }
  }
 
//  System.out.println(str);
  return str;
 }


## Access Logic ##


my access is below but i don't think this is a good sample

because i just got 144point / 250 point

so other soultions are better than my solution

i attached other solution after my solution





cieeilll 
first point is c
first+1 point is i

c and i is differenct so first point will be 2

first point is i
first+1 point is e

c and i is differenct so first point will be 3

firtst point e
first+1 point is e

e and e is the same so cut before first point "ci" and cut after firstPoint +1 to end "ill"
and concat before string and after string

this will be ciill

first point changed first-1



Otheres are Below

public static String simulate(String s){
  for(int i=0; i<s.length()-1 i++){
    if(s.charAT(i) == s.charAT(i+1)){
     s= s.substring(0, i) + s.substring(i+2, s.length);
     i=-1;
     }
  }
}



sombody use StringBuffer.delete

and sombody use Stack

many different way i learend from topcoder --V

No comments:

Post a Comment