paul.keynes
BAN USER//Given a stack S and another empty stack T and a variable v, write a function that returns S but with its //elements reversed.
#import<Foundation/Foundation.h>
#import<UIKit/UIKit.h>
@interface ReverseStack
@property(nonatomic)NSMutableArray *t;
@end
@implementation ReverseStack
-(NSMutableArray*)t
{
if(!_t)
{
_t = [[NSMutableArray alloc]init];
}
return _t;
}
-(id)reverseStack:(NSMutableArray*)s
{
id v;
while(s.length)
{
[self.t addObject:s.lastObject];
v = [NSString stringByAppendingString:[NSString stringWithFormat@"%@",[self.t lastObject]]];
}
return v;
}
int main(int argc,char* argv[])
{
NSLog(@"%@",[self reverseStack:@[@"1",@"2",@"3",@"4",nil]]);
}
@end
Here is the algorithm and implementation in Objective-C
Stacks is implemented using NSMutableArray
1.if ( --> check if lastObject in ORStacks is ( ; then append ( to String or push ( to ORStacks
2.if operator/operand append to String
3.if ) --> check if lastObject in ORStacks is ( ;then push ) to String,pop ORStacks if ORStacks is not empty;else move to the next one
//Eliminate duplicate parantheses in expression
#import<Foundation/Foundation.h>
#import<UIKit/UIKit.h>
@interface DuplicateParantheses
@property(nonatomic)NSMutableArray *stacks;
@property(nonatomic)NSString *output;
-(NSString*)removeDuplicateFromExpression:(NSString*)expression;
@end
@implementation DuplicateParantheses
-(NSMutableArray*)stacks
{
if(!_stacks)
{
_stacks = [[NSMutableArray alloc]init];
}
return _stacks;
}
-(NSString*)output
{
if(!_output)
{
_output = [[NSString alloc]init];
}
return _output;
}
-(NSString*)removeDuplicateFromExpression:(NSString*)expression
{
for(int i=0;i< expression.length-1;i++)
{
NSString *item = [NSString stringFromChar:[expression characterAtIndex:i]];
if([item isEqualToString@"("] && [[self.stacks lastObject]isEqualToString:@"("])
[self.output appendStringFromString:item];
elseif([item isEqualToString@"("]) [self.stacks addObject:item];
elseif([item isEqualToString@")"]&& [[self.stacks lastObject]isEqualToString:@"("])
{
[self.output appendStringFromString:item];
if([self.stacks length])[self.stacks removeLastObject];
}
else
{
[self.output appendStringFromString:item];
}
}
return output;
}
@end
Use two stacks;
- paul.keynes July 08, 2014