1 Aralık 2019 Pazar

Validate String with Paranthesis

Verilen string imizde acilan parantezlerin sirayla kapanip kapanmadigini kontrol etmek istiyoruz.

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