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

Java?C++刷題leetcode1106解析布爾表達(dá)式

 更新時(shí)間:2023年01月16日 14:17:45   作者:AnjaVon  
這篇文章主要為大家介紹了Java?C++刷題leetcode1106解析布爾表達(dá)式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

題目

題目要求

思路:?!居?jì)算器】

  • 和計(jì)算器原理類似,分別用兩個(gè)棧存操作數(shù)和操作符,然后到)就開始運(yùn)算前面的內(nèi)容,括號(hào)里運(yùn)算都相同所以還是比較簡(jiǎn)單的。
  • 要注意字母t、f和布爾值true、false的轉(zhuǎn)換。

Java

class Solution {
    public boolean parseBoolExpr(String expression) {
        Deque<Character> tfs = new ArrayDeque<>(), opts = new ArrayDeque<>();
        for (char c : expression.toCharArray()) {
            if (c == ',')
                continue;
            else if (c == 't' || c == 'f' || c == '(')
                tfs.addLast(c);
            else if (c == '|' || c == '&' || c == '!')
                opts.addLast(c);
            else if (c == ')') {
                char op = opts.pollLast(), cur = ' ';
                while (!tfs.isEmpty() && tfs.peekLast() != '(') {
                    char top = tfs.pollLast();
                    cur = cur == ' ' ? top : calBool(top, cur, op);
                }
                if (op == '!')
                    cur = cur == 't' ? 'f' : 't';
                tfs.pollLast();
                tfs.addLast(cur);
            }
        }
        return tfs.peekLast() == 't';
    }
    char calBool(char cx, char cy, char op) {
        boolean bx = cx == 't', by = cy == 't';
        boolean res = op == '|' ? bx | by : bx & by;
        return res ? 't' : 'f';
    }
}
  • 時(shí)間復(fù)雜度:O(n)
  • 空間復(fù)雜度:O(n)

C++

class Solution {
public:
    bool parseBoolExpr(string expression) {
        stack<char> tfs, opts;
        for (auto c : expression) {
            if (c == ',')
                continue;
            else if (c == 't' || c == 'f' || c == '(')
                tfs.push(c);
            else if (c == '|' || c == '&' || c == '!')
                opts.push(c);
            else if (c == ')') {
                char op = opts.top(), cur = ' ';
                opts.pop();
                while (!tfs.empty() && tfs.top() != '(') {
                    char top = tfs.top();
                    tfs.pop();
                    cur = cur == ' ' ? top : calBool(top, cur, op);
                }
                if (op == '!')
                    cur = cur == 't' ? 'f' : 't';
                tfs.pop();
                tfs.push(cur);
            }
        }
        return tfs.top() == 't';
    }
    char calBool(char cx, char cy, char op) {
        bool bx = cx == 't', by = cy == 't';
        bool res = op == '|' ? bx | by : bx & by;
        return res ? 't' : 'f';
    }
};
  • 時(shí)間復(fù)雜度:O(n)
  • 空間復(fù)雜度:O(n)

Rust

impl Solution {
    pub fn parse_bool_expr(expression: String) -> bool {
        let (mut tfs, mut opts) = (vec![], vec![]);
        for c in expression.chars() {
            if c == 't' || c == 'f' || c == '(' {
                tfs.push(c);
            }
            else if c == '|' || c == '&' || c == '!' {
                opts.push(c);
            }
            else if c == ')' {
                let op = opts.pop().unwrap();
                let mut cur = 'e';
                while !tfs.is_empty() && tfs[tfs.len() - 1] != '(' {
                    let top = tfs.pop().unwrap();
                    if cur == 'e' {
                        cur = top;
                    }
                    else { // fn calBool()
                        let (bx, by, mut tmp) = (top == 't', cur == 't', false);
                        if op == '|' {
                            tmp = bx | by;
                        }
                        else {
                            tmp = bx & by;
                        }
                        if tmp {
                            cur = 't';
                        }
                        else {
                            cur = 'f';
                        }
                    }
                }
                if op == '!' { // 非
                    if cur == 't' {
                        cur = 'f';
                    }
                    else {
                        cur = 't';
                    }
                }
                tfs.pop();
                tfs.push(cur);
            }
        }
        tfs.pop().unwrap() == 't'
    }
}
  • 時(shí)間復(fù)雜度:O(n)
  • 空間復(fù)雜度:O(n)

總結(jié)

  • 像是數(shù)據(jù)結(jié)構(gòu)里學(xué)棧時(shí)舉的計(jì)算器的例子,就循著這個(gè)思路感覺不算困難題。
  • 當(dāng)然也可以遞歸或者只用一個(gè)棧,整體思路其實(shí)就是巧妙一點(diǎn)的模擬。

以上就是Java C++刷題leetcode1106解析布爾表達(dá)式的詳細(xì)內(nèi)容,更多關(guān)于Java C++解析布爾表達(dá)式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java實(shí)現(xiàn)后臺(tái)數(shù)據(jù)顯示在前端

    java實(shí)現(xiàn)后臺(tái)數(shù)據(jù)顯示在前端

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)后臺(tái)數(shù)據(jù)顯示在前端,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • javaweb中靜態(tài)文件的常用處理方法匯總

    javaweb中靜態(tài)文件的常用處理方法匯總

    這篇文章主要介紹了javaweb中靜態(tài)文件的常用處理方法匯總,非常實(shí)用的技巧,需要的朋友可以參考下
    2014-08-08
  • 詳解Java中的封裝、繼承、多態(tài)

    詳解Java中的封裝、繼承、多態(tài)

    本文主要介紹了Java中的封裝、繼承、多態(tài)的相關(guān)知識(shí),具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • Java中5種輸出換行方式小結(jié)

    Java中5種輸出換行方式小結(jié)

    在Java中,輸出換行符是一項(xiàng)非?;镜牟僮?它在控制臺(tái)中輸出文本時(shí)非常常見,本文主要介紹了Java中5種輸出換行方式小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • 淺談Mybatis傳參類型如何確定

    淺談Mybatis傳參類型如何確定

    最近有小伙伴在討論#{}與${}的區(qū)別時(shí),有提到#{}是用字符串進(jìn)行替換,本文主要介紹了mapper接口中不同的參數(shù)類型,最終拼接sql中是如何進(jìn)行替換的,感興趣的可以了解一下
    2021-10-10
  • Spring實(shí)戰(zhàn)之協(xié)調(diào)作用域不同步的Bean操作示例

    Spring實(shí)戰(zhàn)之協(xié)調(diào)作用域不同步的Bean操作示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之協(xié)調(diào)作用域不同步的Bean操作,結(jié)合實(shí)例形式分析了Spring協(xié)調(diào)作用域不同步的Bean相關(guān)配置及使用技巧,需要的朋友可以參考下
    2019-11-11
  • Lombok使用@Tolerate實(shí)現(xiàn)沖突兼容問題

    Lombok使用@Tolerate實(shí)現(xiàn)沖突兼容問題

    這篇文章主要介紹了Lombok使用@Tolerate實(shí)現(xiàn)沖突兼容問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 關(guān)于maven全局配置文件settings.xml解析

    關(guān)于maven全局配置文件settings.xml解析

    這篇文章主要介紹了關(guān)于maven全局配置文件settings.xml,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2022-03-03
  • java實(shí)現(xiàn)貪吃蛇小游戲

    java實(shí)現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • java服務(wù)器端微信、支付寶支付和退款功能

    java服務(wù)器端微信、支付寶支付和退款功能

    這篇文章主要為大家詳細(xì)介紹了java服務(wù)器端微信、支付寶支付和退款功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09

最新評(píng)論

吴旗县| 穆棱市| 高碑店市| 铜山县| 聂拉木县| 镇远县| 旌德县| 温泉县| 呼和浩特市| 玛多县| 进贤县| 雅安市| 石河子市| 慈溪市| 平塘县| 华容县| 武胜县| 元阳县| 湘乡市| 汝州市| 深圳市| 科技| 巴林左旗| 廉江市| 锦屏县| 西城区| 息烽县| 日喀则市| 浦城县| 怀远县| 玉门市| 宁南县| 马公市| 通城县| 潮安县| 阳朔县| 玉山县| 襄城县| 桃江县| 合水县| 盐边县|