String
Description
You own a Goal Parser that can interpret a string command
. The command
consists of an alphabet of "G"
, "()"
and/or "(al)"
in some order. The Goal Parser will interpret "G"
as the string "G"
, "()"
as the string "o"
, and "(al)"
as the string "al"
. The interpreted strings are then concatenated in the original order.
Given the string command
, return the Goal Parser 's interpretation of command
.
Example 1:
Input: command = "G()(al)"
Output: "Goal"
Explanation: The Goal Parser interprets the command as follows:
G -> G
() -> o
(al) -> al
The final concatenated result is "Goal".
Example 2:
Input: command = "G()()()()(al)"
Output: "Gooooal"
Example 3:
Input: command = "(al)G(al)()()G"
Output: "alGalooG"
Constraints:
1 <= command.length <= 100
command
consists of "G"
, "()"
, and/or "(al)"
in some order.
Solutions
Solution 1: String Replacement
According to the problem, we only need to replace "()"
with 'o'
and "(al)"
with "al"
in the string command
.
Python3 Java C++ Go TypeScript Rust C
class Solution :
def interpret ( self , command : str ) -> str :
return command . replace ( '()' , 'o' ) . replace ( '(al)' , 'al' )
class Solution {
public String interpret ( String command ) {
return command . replace ( "()" , "o" ). replace ( "(al)" , "al" );
}
}
class Solution {
public :
string interpret ( string command ) {
while ( command . find ( "()" ) != -1 ) command . replace ( command . find ( "()" ), 2 , "o" );
while ( command . find ( "(al)" ) != -1 ) command . replace ( command . find ( "(al)" ), 4 , "al" );
return command ;
}
};
func interpret ( command string ) string {
command = strings . ReplaceAll ( command , "()" , "o" )
command = strings . ReplaceAll ( command , "(al)" , "al" )
return command
}
function interpret ( command : string ) : string {
return command . replace ( /\(\)/g , 'o' ). replace ( /\(al\)/g , 'al' );
}
impl Solution {
pub fn interpret ( command : String ) -> String {
command . replace ( "()" , "o" ). replace ( "(al)" , "al" )
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 char * interpret ( char * command ) {
int n = strlen ( command );
char * ans = malloc ( sizeof ( char ) * n + 1 );
int i = 0 ;
for ( int j = 0 ; j < n ; j ++ ) {
char c = command [ j ];
if ( c == 'G' ) {
ans [ i ++ ] = 'G' ;
} else if ( c == '(' ) {
if ( command [ j + 1 ] == ')' ) {
ans [ i ++ ] = 'o' ;
} else {
ans [ i ++ ] = 'a' ;
ans [ i ++ ] = 'l' ;
}
}
}
ans [ i ] = '\0' ;
return ans ;
}
Solution 2: String Iteration
We can also iterate over the string command
. For each character $c$:
If it is 'G'
, directly add $c$ to the result string;
If it is '('
, check if the next character is ')'
. If it is, add 'o'
to the result string. Otherwise, add "al"
to the result string.
After the iteration, return the result string.
The time complexity is $O(n)$, and the space complexity is $O(1)$.