Ornegin:
abc(){}[] => bu bizim gecerlidir. cunku acilan parantezler sirayla kapanmistir.
({)} => Bu ise gecersizdir. cunku { kapanmadan ( kapanmis.
Bunun icin izlememiz gereken yol su olmalidir.
Oncelikle acik parantezlerin ne oldugunu bir set te tanimladim ki o anki characterimin acik parantez oldugunu kontrol edebileyim. Eger acik parantezse bunu stack e ekliyorum. (Bu sekilde en son hangi parantez acildi kontrol edebilecegim)
Daha sonra kapali parantezler ve onlarin acik karsiliklarini bir mapte tanimliyorum. Bu sekilde eger o anki elemanim kapali parantezse bunun acik karsiligini buluyorum, ve stackteki son elemanla karsilastiriyorum. ornegin o anki elemanim ] ise bunun acik karsiligini mapten [ olarak buldum. Simdi ise stack in en ustundeki elemani pop ediyorum. [ mu diye kontrol ediyorum, eger degilse duzgun kapanmamistir. false dondurup bitiriyorum.
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.Stack;
public class ValidateParanthesisString {
public static boolean isValidParanthesis(String str) {
Map<Character, Character> closedMap = new HashMap();
closedMap.put(')', '(');
closedMap.put('}', '{');
closedMap.put(']', '[');
Set<Character> openParanthesis = new HashSet();
openParanthesis.add('{');
openParanthesis.add('[');
openParanthesis.add('(');
Stack<Character> openParanthesisStack = new Stack();
for(int i=0; i< str.length(); i++) {
if(openParanthesis.contains(str.charAt(i))) {
openParanthesisStack.push(str.charAt(i));
}
if(closedMap.containsKey(str.charAt(i))) {
if(!openParanthesisStack.pop().equals(closedMap.get(str.charAt(i)))) {
return false;
}
}
}
return true;
}
public static void main(String[] args) {
String str = "({)}";
System.out.println(isValidParanthesis(str));
String str2 = "abc() {}[]";
System.out.println(isValidParanthesis(str2));
}
}
Output: false true
Hiç yorum yok:
Yorum Gönder