力扣题目学习笔记(OC + Swift)20. 有效的括号
2023-12-23 23:36:35
20. 有效的括号
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
方法一 栈+hash表
配对的问题首先想到的是用栈来解决,但是如何巧妙的使用hash表刚开始没想到,用的是if判断。
由于要配对,考虑以下几种情况:
1.数据自身不成对,奇数个时结果必然无法配对
2.按顺序入栈,配对到出栈,最后栈为空即为所有配对完成
Swift
func isValid(_ s: String) -> Bool {
//为奇数则不可能配对,直接返回
if s.count % 2 != 0 {
return false
}
let hashTable:[Character : Character] = [
"}" : "{",
")" : "(",
"]" : "["
]
//create stack
let stack = Stack()
for char in s {
if hashTable.keys.contains(char) {
if stack.top() == hashTable[char] {
let _ = stack.pop()
continue
}else {
return false
}
}
stack.push(char)
}
let result = stack.count() == 0 ? true : false
return result
}
其中栈代码如下:
class Stack {
private var items = [Character]()
func push(_ chara: Character) {
items.append(chara)
}
func pop() -> Character? {
if items.count <= 0 {
return nil
}
let res = items.last
items.removeLast()
return res
}
func top() -> Character? {
return items.last
}
func count() -> Int {
return items.count
}
}
OC
-(BOOL)isValid:(NSString *)s {
if (s.length % 2 != 0) {
return NO;
}
NSDictionary *hashTable = @{
@")" : @"(",
@"}" : @"{",
@"]" : @"["
};
Stack *stack = [Stack new];
for (NSInteger i=0; i<s.length; i++) {
unichar chara = [s characterAtIndex:i];
NSString *s = [[NSString alloc] initWithCharacters:&chara length:1];
if ([hashTable.allKeys containsObject:s]) {
if ([stack.top isEqualToString:hashTable[s]]) {
[stack pop];
continue;
}else {
return NO;
}
}
[stack push:s];
}
return stack.count == 0 ? YES : NO;
}
实现栈结构的OC代码:
@interface Stack<T> : NSObject
- (void)push:(T)item;
- (T)pop;
- (T)top;
-(NSInteger)count;
@end
//------------------------------------------
@implementation Stack
- (instancetype)init {
if (self = [super init]) {
_items = [[NSMutableArray alloc] init];
}
return self;
}
- (void)push:(id)item {
[self.items addObject:item];
}
- (id)pop {
id last = _items.lastObject;
[self.items removeLastObject];
return last;
}
- (id)top {
return _items.lastObject;
}
-(NSInteger)count {
return self.items.count;
}
@end
文章来源:https://blog.csdn.net/zzl819954692/article/details/135165941
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!