2 Ocak 2018 Salı

Balanced Parentheses - Java (Stack)


Balanced Parentheses - Java (Stack)

Aşağıdaki örnek, minik bir müdahale ile daha uygun bir hale getirilebilir. Sıklıkla ödev olarak sorduğum bir soru olduğu için burada minik bir eksik ile paylaşıyorum.
import java.util.Scanner;
import java.util.Stack;
public class Program {
public static void main(String[] args) {
// http://ercanbozkurt.blogspot.com.tr
System.out.println("Parantezleri giriniz:");
Scanner sc = new Scanner(System.in);
String brackets = sc.nextLine();
Stack<Character> stack = new Stack<Character>(); // Açılış parantezlerini depolayacak stack oluşturuluyor
boolean isBalanced = true; // Parantezlerin dengede olup olmadığını bildireceğimiz değişken dengede varsayımı ile tanımlanıyor
for (int i = 0; i < brackets.length(); i++) { // Parantezlerde döngü kuruluyor
char bracket = brackets.charAt(i); //Sıradaki parantez okunup char değişkene atılıyor
if (bracket == '{' || bracket == '[' || bracket == '(') { // Parantezin uygun 3lüdden birinin açılışı olup olmadığı denetleniyor
stack.push(bracket); // uygun ise koleksiyona ekleniyor
} else {
// kapanış ise hangi açılışla eslesmesi gerektiği tespit ediliyor
if (bracket == '}') {
bracket = '{';
} else if (bracket == ')') {
bracket = '(';
} else if (bracket == ']') {
bracket = '[';
}
// acilis sonrasi gelirsek empty olamaz, kapanisla baslarsak ya da ac kapa kapa seklinde gelirsek bos buluruz
if (stack.empty()) {
isBalanced = false;
break; // döngüden cıkabiliriz
}
if (bracket == stack.peek()) {// koleksiyondan koparmadan ilk eleman denetleniyor
stack.pop(); // koparılıyor
} else {
isBalanced = false;
break;
}
}
}
if (isBalanced) { // Döngü bittiğinde durum kontrol ediliyor
System.out.println("DENGEDE");
}
else
{
System.out.println("DENGEDE DEĞİL");
}
}
}

Hiç yorum yok: