1. 程式人生 > >java實現最長匹配括號的長度

java實現最長匹配括號的長度

下面是leetcode的Longest Valid Parentheses的一個解法  

時間複雜度為O(n) 空間複雜度為O(1)

/*
	 * 找出最長的配對括號的長度 例如 “)()()(”的長度為4 採用左右兩遍掃描的辦法
	 */
	public int longestValueParenthese(String s) {
		// 定義儲存結果的變數
		int answer = 0;
		// 定義配對的深度
		int depth = 0;
		// 定義開始位置
		int start = -1;
		for (int i = 0; i < s.length(); i++) {
			// 遍歷字串的每一個字元 要是等於左括號 深度加一
			if (s.charAt(i) == '(') {
				++depth;
			} else {
				// 要是不是左括號 深度減少一
				--depth;
				if (depth < 0) {
					depth = 0;
					start = i;
					// 當最後的深度是0的時候
				} else if (depth == 0) {
					// 求最後的結果
					answer = Math.max(answer, i - start);
				}
			}
		}
		// 下面是從右往左掃描的情況
		depth = 0;
		start = s.length();
		for (int i = s.length() - 1; i >= 0; --i) {
			if (s.charAt(i) == ')') {
				++depth;
			} else {
				--depth;
				if (depth < 0) {
					depth = 0;
					start = i;
				} else if (depth == 0) {
					answer = Math.max(answer, start - i);
				}
			}
		}
		return answer;
	}

相關推薦

java實現匹配括號長度

下面是leetcode的Longest Valid Parentheses的一個解法   時間複雜度為O(n) 空間複雜度為O(1) /* * 找出最長的配對括號的長度 例如 “)()()(”的長度為4 採用左右兩遍掃描的辦法 */ public int lon

有效括號長度 java

題目:輸入只包含圓括號的字串,找出最長的合法括號子串的長度 比如: “(()”——》2,最長的有效子串是“()” “)()())”——》4,最長的有效子串是“()()” 解題思路: 如果輸入是左括號就直接入棧,如果是右括號,如果此時棧為空或此時的棧頂不為左括號就不作處理同

有效括號長度

給定只包含括號字元'('和 ')''的字串,請找出最長的有效括號內子括號的長度。 舉幾個例子如下: 例如對於"( ()",最長的有效的括號中的子字串是"()" ,有效雙括號數1個,故它的長度為 2。 再比如對於字串") () () )",其中最長的有效的括號中的子字串是"() ()",有效雙括號數

Java實現-無重複字元的子串

public class Solution { /** * @param s: a string * @return: an integer */

leetcode 32. Longest Valid Parentheses 有效括號長度

Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring

java公共子串的長度

length 如果 接下來 log light AC subst 子串 substring 1這道題目就是給定兩個字符串,然後求這兩個字符串的最長公共子串的最大長度,假設我的f()方法是來求兩個字符串的最大公共子串,從頭開始逐一比較,如果相等,則 繼續調用這個方法,使得遞歸

Leetcode 32 有序括號 Java

Leetcode 32 最長有序括號 題目描述 給定一個只包含 ‘(’ 和 ‘)’ 的字串,找出最長的包含有效括號的子串的長度。 示例 1: 輸入: “(()” 輸出: 2 示例 2: 輸入: “)()())” 輸出: 4 解釋: 最長有效括號子串為 “()()” 解題思

Leetcode演算法Java全解答--32. 有效括號

Leetcode演算法Java全解答–32. 最長有效括號 文章目錄 Leetcode演算法Java全解答--32. 最長有效括號 題目 想法 結果 總結 程式碼 我的答案 大佬們的答案

Java實現用棧判斷括號匹配問題

Stack的用例Parentheses,輸入一串括號用棧判斷其中的括號是否匹配,例如[()]{()}程式列印true,對於[](則列印false。 思路: 遇到左括號入棧,遇到右括號時先檢查棧是否為空,若空則返回false,若不空則彈出棧頂元素看與右括號是否

java 實現中英文混時得到長度字元替換

java 程式碼實現  public static boolean isLetter(char c) {                   int k = 0x80;                   return c / k == 0 ? true : fa

【Python】括號匹配問題:給定字串,僅包含左括號‘(’和右括號‘)’,它可能不是括號匹配的,設計演算法,找出匹配的括號子串

最長括號匹配 示例: 給定字串,僅包含左括號‘(’和右括號‘)’,它可能不是括號匹配的,設計演算法,找出最長匹配的括號子串。 演算法分析 只有在右括號和左括號發生匹配時,才有可能更新最終解。 計算s[0…i]中左括號數目與右括號數目的差

leetcode第32題:有效括號(遇到一個奇葩的錯誤)

問題描述: 給一個只包含 '(' 和 ')' 的字串,找出最長的有效(正確關閉)括號子串的長度。 對於 "(()",最長有效括號子串為 "()" ,它的長度是 2。 另一個例子 ")()())",最長有效括號子

[Swift]LeetCode32. 有效括號 | Longest Valid Parentheses

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring. Exampl

python實現公共子序列的求解

(待完善...) 最長公共子序列是動態規劃基本題目,下面按照動態規劃基本步驟解出來。 1.找出最優解的性質,並刻劃其結構特徵 序列a共有m個元素,序列b共有n個元素,如果a[m-1]==b[n-1],那麼a[:m]和b[:n]的最長公共子序列長度就是a[:m-1]和b[:n-1]的最長公

Leetcode演算法——32、有效括號字串

給定一個字串,只包含’(‘和’)’。 要求找到最長的有效的子串。 Example 1: Input: “(()” Output: 2 Explanation: The longest valid parentheses substring is “()” Example 2:

LeetCode---32.有效括號

題目來源:https://leetcode-cn.com/problems/longest-valid-parentheses/description/ 題目描述: 演算法描述: 1.定義一個maxLength記錄最長有效括號長度,beginIndex記錄有效括號的起始位置。

JAVA實現KMP模式匹配演算法

獲取next()陣列 /** * 獲取next陣列 * data 主字串 * */ public static int[] getNext(String data){ int[] next=new int[data.length()] ; next [0]=0;

leetcode 32 有效括號 O(N)時間解法

題目: 給一個只包含 ‘(’ 和 ‘)’ 的字串,找出最長的有效(正確關閉)括號子串的長度。 對於 “(()”,最長有效括號子串為 “()” ,它的長度是 2。 另一個例子 “)()())”,最長有效括號子串為 “()()”,它的長度是 4。 連結: https://le

Leetcode 32:有效括號詳細的解法!!!)

給定一個只包含 '(' 和 ')' 的字串,找出最長的包含有效括號的子串的長度。 示例 1: 輸入: "(()" 輸出: 2 解釋: 最長有效括號子串為 "()" 示例 2: 輸入: ")()())" 輸出: 4 解釋: 最長有效括號子串為 "()()" 解題思路

java實現大堆(陣列方式)

最大堆、最小堆其實就是優先佇列,每次取出的元素都是最大或最小的。本部落格主要用陣列實現最大堆,最小堆的實現原理也是一樣的。當然,也可以用list集合來儲存元素,方便很多,不用事先設定容量的大小。但還是想用原生的方式來實現一下。具體的註釋已經嵌入到程式碼當中了。 package heap; //