
Отже, є задача:
Є код, написаний мною, який цю задачу коректно вирішує:Для введённой пользователем с клавиатуры строки программа должна определить, корректно ли расставлены скобки (круглые, фигурные, квадратные). «Перемешивание» скобок (пример: «{[}]») считается некорректным вариантом.
Код: Виділити все
import java.util.*;
public class numberKostin7 {
public static void main (String[] args)
{
Scanner input = new Scanner(System.in); //відкриваю вхідний потік
String insertedString = input.nextLine(); //зчитую стрічку з клавіатури
char[] last = new char[insertedString.length()]; //ініціалізую масив довжиною в довжину введеної стрічки
int countKru = 0; int countFig = 0; int countKva = 0; //счотчікі скобок різних типів
int error = 0; int j = 0; //счотчік помилок і счотчік для прохода по масиву
for (int i=0; i < insertedString.length(); i++) //цикл проходить по введеній стрічці
{
switch (insertedString.charAt(i))
{
case '[': //якщо даний елемент стрічки - відкриваюча квадратна дужка
last[j] = insertedString.charAt(i); //при відкриванні дужки вона записується у поточний елемент масиву
j++; //счотчік масива інкрементується
countKva++; //інкрементується счотчік квадратних дужок
break;
case '(': //виконуюються аналогічні дії, але для круглої дужки
last[j] = insertedString.charAt(i);
j++;
countKru++;
break;
case '{': //виконуюються аналогічні дії, але для відкриваючої фігурної дужки
last[j] = insertedString.charAt(i);
j++;
countFig++;
break;
case ']': //якщо останній знайдений елемент - закриваюча квадратна дужка
j--; // декрементується счотчік масиву
if (last[j] == '(' || last[j] == '{') //перевіряє, чи остання відкрита дужка була неквадратною
error++; //інкрементує счотчік помилок
countKva--; //декрементує счотчік відкритих квадратних дужок
break;
case ')': //аналогічно для закриваючої круглої дужки
j--;
if (last[j] == '[' || last[j] == '{')
error++;
countKru--;
break;
case '}': //аналогічно для закриваючої фігурної дужки
j--;
if (last[j] == '(' || last[j] == '[')
error++;
countFig--;
break;
}
}
System.out.println(countKru + " ( ) quantity errors");
System.out.println(countKva + " [ ] quantity errors");
System.out.println(countFig + " { } quantity errors");
System.out.println(error + " pairing errors");
}
}
мені не подобається те, що я відкриваю масив довжиною в цілу стрічку. Це якесь марнування ресурсів. Думаю, цю задачу можна вирішити простіше.
Питання:
як можна оптимізувати алгоритм?
якби хтось хоча би на пальцях пояснив, як оптимізувати алгоритм, ідею в код я переведу сам.
Заздалегідь вдячний!