Rumah >Java >javaTutorial >Panjang kurungan kurungan seimbang terpanjang menggunakan java

Panjang kurungan kurungan seimbang terpanjang menggunakan java

Patricia Arquette
Patricia Arquetteasal
2025-02-07 11:55:10164semak imbas

Length of longest balanced parentheses prefix using Java

Artikel ini menerangkan cara menggunakan Java untuk mencari panjang kurungan yang paling lama seimbang. Pertama, kita akan memahami masalah menggunakan beberapa contoh dan kemudian belajar dua pendekatan yang berbeza untuk mencarinya.

Penjelasan masalah

Di sini kita memberikan rentetan yang mengandungi kurungan dan kita perlu mencari panjang set kurungan seimbang dari rentetan. Dalam erti kata lain, jika terdapat semua kurungan pembukaan

"(" ")"

, maka kita panggil ia seimbang.

awalan menentukan set seimbang dari awal rentetan. Sebagai contoh, untuk set kurungan '(()) ()', hanya '(())' dipertimbangkan. senario input dan output

Untuk pemahaman yang lebih baik, mari kita lihat beberapa senario input dan output.

Jika rentetan input adalah

"(()"

, awalan kurungan seimbang adalah

()
    , jadi panjangnya adalah 2.
  • Jika rentetan input adalah "((() ())) (((" , kurungan kurungan seimbang adalah ((() ()))) Jadi panjangnya 8.
  • Jika rentetan input adalah "(() ()) () ()" , kurungan kurungan seimbang adalah (() ()) , jadi panjang adalah 6.
  • Panjang kurungan kurungan seimbang yang paling lama dapat dijumpai seperti berikut: menggunakan struktur data stack
  • Count Pembukaan dan Penutup Pandangan

menggunakan struktur data stack
  • tumpukan boleh digunakan. Sekiranya anda mendapati tanda kurung pembukaan '
  • (
  • ' dari timbunan, tolaknya ke timbunan. Jika anda menemui tanda kurung penutup, pop timbunan dan tambah pembolehubah kaunter dengan 2 (baki panjang pasangan Anda mendapat 2.) Teruskan melakukan ini dan mengembalikan pemboleh ubah kaunter apabila ia menjadi timbunan kosong
  • Algoritma

Algoritma adalah seperti berikut:

Jika watak itu

(

, tolaknya ke timbunan.

Jika aksara

adalah

)
<code><p><b>ステップ1:</b>スタックとカウンタを初期化します。</p>
<p><b>ステップ2:</b>文字列の各文字を反復処理します。</p></code>
, muncul timbunan.
  • Meningkatkan kaunter dengan 2. Semak jika timbunan kosong.
  • Jika ia kosong, berakhir gelung.
  • Langkah 3:
  • Kembalikan kaunter pada akhir.
  • Contoh

    <code><p><b>ステップ1:</b>スタックとカウンタを初期化します。</p>
    <p><b>ステップ2:</b>文字列の各文字を反復処理します。</p></code>

    output

    rentetan input ialah: ((()) ((( Panjang kurungan kurungan seimbang yang paling lama ialah: 6

    Count Pembukaan dan Penutup Pandangan

    Pendekatan ini menggunakan dua pembolehubah: kiraan dan panjang. Jika watak itu " (" dari rentetan, kiraan kenaikan sebanyak 1; jika watak itu "

    )

    ", kiraan pengurangan sebanyak 1 dan panjang kenaikan sebanyak 2. Semak jika kiraan adalah 0, jika ia adalah 0, keluar dari gelung dan panjang kembali. Contoh

    output
    <code class="language-java">import java.util.Stack;
    
    public class Example {
       public static int longestBalancedPrefix(String s) {
          Stack<character> stack = new Stack<>();
          int count = 0;
          for (int i = 0; i < s.length(); i++) {
             char c = s.charAt(i);
             if (c == '(') {
                stack.push(c);
             } else if (c == ')') {
                if (!stack.isEmpty()) {
                   stack.pop();
                   count += 2;
                }
             }
             if (stack.isEmpty()) {
                break;
             }
          }
          return count;
       }
    
       public static void main(String[] args) {
          String s = "((())(((";
          int length = longestBalancedPrefix(s);
          System.out.println("入力文字列は:" + s);
          System.out.println("最長のバランスの取れた括弧のプレフィックスの長さは:" + length);
       }
    }</character></code>

    rentetan input adalah ((()) ()) (())) Panjang Panjang Parentheses yang paling lama adalah 8

Atas ialah kandungan terperinci Panjang kurungan kurungan seimbang terpanjang menggunakan java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn