最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java移除無效括號(hào)的方法實(shí)現(xiàn)

 更新時(shí)間:2021年08月06日 16:14:39   作者:王小二(海闊天空)  
本文主要介紹了Java移除無效括號(hào)的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、題目

給你一個(gè)由 ‘('、')' 和小寫字母組成的字符串 s。

你需要從字符串中刪除最少數(shù)目的 ‘(' 或者 ‘)' (可以刪除任意位置的括號(hào)),使得剩下的「括號(hào)字符串」有效。

有效「括號(hào)字符串」應(yīng)當(dāng)符合以下 任意一條 要求:

空字符串或只包含小寫字母的字符串
可以被寫作 AB(A 連接 B)的字符串,其中 A 和 B 都是有效「括號(hào)字符串」
可以被寫作 (A) 的字符串,其中 A 是一個(gè)有效的「括號(hào)字符串」

二、示例

))((  -》  

(leetode  -》  leetode
leetode)  -》  leetode

(lee(to)de  -》  lee(to)de
lee(to)de)  -》  lee(to)de

(lee(t(c)o)de  -》  lee(t(c)o)de
lee(t(c)o)de)  -》  lee(t(c)o)de

三、解法1

public class Test {

 public static void main(String[] args) {
  String s1 = "))((";
  System.out.println(s1 + "  -》  " + minRemoveToMakeValid(s1));

  String s2 = "(leetode";
  System.out.println(s2 + "  -》  " + minRemoveToMakeValid(s2));

  String s3 = "leetode)";
  System.out.println(s3 + "  -》  " + minRemoveToMakeValid(s3));

  String s4 = "(lee(to)de";
  System.out.println(s4 + "  -》  " + minRemoveToMakeValid(s4));

  String s5 = "lee(to)de)";
  System.out.println(s5 + "  -》  " + minRemoveToMakeValid(s5));

  String s6 = "(lee(t(c)o)de";
  System.out.println(s6 + "  -》  " + minRemoveToMakeValid(s6));

  String s7 = "lee(t(c)o)de)";
  System.out.println(s7 + "  -》  " + minRemoveToMakeValid(s7));
 }

 public static String minRemoveToMakeValid(String str) {
  // 初始化"("和")"的個(gè)數(shù)為0
  int left = 0;
  int right = 0;

  // 將字符串轉(zhuǎn)換為char數(shù)組
  char[] chars = str.toCharArray();

  // 從左到右標(biāo)記多余的")"右括號(hào)
  for (int i = 0; i < chars.length; i++) {
   if (chars[i] == '(') {
    left++;
   } else if (chars[i] == ')') {
    right++;
   }

   if (right > left) {
    chars[i] = '#';

    left = right = 0;
   }
  }

  left = right = 0;

  // 從右到左標(biāo)記多余的"("左括號(hào)
  for (int i = chars.length - 1; i >= 0; i--) {
   if (chars[i] == '(') {
    left++;
   } else if (chars[i] == ')') {
    right++;
   }

   if (right < left) {
    chars[i] = '#';

    left = right = 0;
   }
  }

  return String.valueOf(chars).replaceAll("#", "");
 }
}

四、解法2

Stack.peek 與Sstack.pop 的區(qū)別

  • 相同點(diǎn):大家都返回棧頂?shù)闹怠?/li>
  • 不同點(diǎn):peek 不改變棧的值(不刪除棧頂?shù)闹?,pop會(huì)把棧頂?shù)闹祫h除。
public class Test {

 public static void main(String[] args) {
  String s1 = "))((";
  System.out.println(s1 + "  -》  " + minRemoveToMakeValid(s1));

  String s2 = "(leetode";
  System.out.println(s2 + "  -》  " + minRemoveToMakeValid(s2));

  String s3 = "leetode)";
  System.out.println(s3 + "  -》  " + minRemoveToMakeValid(s3));

  String s4 = "(lee(to)de";
  System.out.println(s4 + "  -》  " + minRemoveToMakeValid(s4));

  String s5 = "lee(to)de)";
  System.out.println(s5 + "  -》  " + minRemoveToMakeValid(s5));

  String s6 = "(lee(t(c)o)de";
  System.out.println(s6 + "  -》  " + minRemoveToMakeValid(s6));

  String s7 = "lee(t(c)o)de)";
  System.out.println(s7 + "  -》  " + minRemoveToMakeValid(s7));
 }

 public static String minRemoveToMakeValid(String str) {
  // 記錄要?jiǎng)h除括號(hào)的下標(biāo),然后從后往前刪除坐標(biāo)
  StringBuffer result = new StringBuffer(str);
  
  Stack<Integer> stack = new Stack<>();
  ArrayList<Integer> deleteRes = new ArrayList<>();
  
  for (int i = 0; i < str.length(); i++) {
   if (str.charAt(i) == '(') {
    stack.push(i);
   } else if (str.charAt(i) == ')') {
    if (stack.empty()) {
     deleteRes.add(i);
    } else if (str.charAt(stack.peek()) == '(') {
     stack.pop();
    }
   }
  }
  
  while (!stack.empty()) {
   int temp = stack.peek();
   stack.pop();
   deleteRes.add(0, temp);
  }
  
  deleteRes.sort(Integer::compareTo);
  
  for (int i = deleteRes.size() - 1; i >= 0; i--) {
   result.deleteCharAt(deleteRes.get(i));
  }
  
  return result.toString();
 }
}

到此這篇關(guān)于Java移除無效括號(hào)的方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java移除無效括號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Jedis操作Redis數(shù)據(jù)庫(kù)的方法

    Jedis操作Redis數(shù)據(jù)庫(kù)的方法

    這篇文章主要為大家詳細(xì)介紹了Jedis操作Redis數(shù)據(jù)庫(kù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Spring框架實(shí)現(xiàn)文件上傳功能

    Spring框架實(shí)現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了Spring框架實(shí)現(xiàn)文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Spring?Validation實(shí)現(xiàn)數(shù)據(jù)校驗(yàn)的示例

    Spring?Validation實(shí)現(xiàn)數(shù)據(jù)校驗(yàn)的示例

    Spring?Validation其實(shí)就是對(duì)Hibernate?Validator進(jìn)一步的封裝,方便在Spring中使用,這篇文章主要介紹了Spring?Validation實(shí)現(xiàn)數(shù)據(jù)校驗(yàn)的示例,需要的朋友可以參考下
    2023-03-03
  • Java對(duì)象傳遞與返回的細(xì)節(jié)問題詳析

    Java對(duì)象傳遞與返回的細(xì)節(jié)問題詳析

    我們知道這是一個(gè)核心概念,在Java中總是按值傳遞而不是按引用傳遞,下面這篇文章主要給大家介紹了關(guān)于Java對(duì)象傳遞與返回的細(xì)節(jié)問題的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • java實(shí)現(xiàn)在原有日期時(shí)間上加幾個(gè)月或幾天

    java實(shí)現(xiàn)在原有日期時(shí)間上加幾個(gè)月或幾天

    這篇文章主要介紹了java實(shí)現(xiàn)在原有日期時(shí)間上加幾個(gè)月或幾天,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 理解 MyBatis 是如何在 Spring 容器中初始化的

    理解 MyBatis 是如何在 Spring 容器中初始化的

    這篇文章主要介紹了理解 MyBatis 是如何在 Spring 容器中初始化的,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java小程序賽馬游戲?qū)崿F(xiàn)過程詳解

    Java小程序賽馬游戲?qū)崿F(xiàn)過程詳解

    這篇文章主要介紹了Java小程序賽馬游戲?qū)崿F(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Java中ArrayList類的源碼解析

    Java中ArrayList類的源碼解析

    本文主要介紹了Java中ArrayList類的源碼解析,具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • 淺談SpringMVC的攔截器(Interceptor)和Servlet 的過濾器(Filter)的區(qū)別與聯(lián)系 及SpringMVC 的配置文件

    淺談SpringMVC的攔截器(Interceptor)和Servlet 的過濾器(Filter)的區(qū)別與聯(lián)系 及Spr

    這篇文章主要介紹了淺談SpringMVC的攔截器(Interceptor)和Servlet 的過濾器(Filter)的區(qū)別與聯(lián)系 及SpringMVC 的配置文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 解決mybatis plus報(bào)錯(cuò)Invalid bound statement (not found):問題

    解決mybatis plus報(bào)錯(cuò)Invalid bound statement 

    在使用MyBatis時(shí)遇到InvalidBoundStatement異常,常因多個(gè)MapperScan配置沖突或者包掃描路徑設(shè)置錯(cuò)誤,解決方法包括保留一個(gè)MapperScan聲明、檢查jar包沖突、確保命名空間和掃描路徑正確,使用@TableId注解指定主鍵
    2024-11-11

最新評(píng)論

大兴区| 依兰县| 湖南省| 隆子县| 汝阳县| 武宣县| 井陉县| 博野县| 泸西县| 仁布县| 襄樊市| 长武县| 慈利县| 吉安县| 二连浩特市| 静宁县| 濮阳市| 菏泽市| 余江县| 改则县| 平谷区| 兰考县| 申扎县| 尼勒克县| 灵台县| 阳曲县| 莱州市| 嘉鱼县| 红原县| 施秉县| 阳城县| 新巴尔虎左旗| 珲春市| 安义县| 双辽市| 林州市| 海林市| 临清市| 新丰县| 祁东县| 增城市|