摘要:所組成的最小單位,可以看作一對括號。從左往右看,作為決定一組完整最小單位的符號。每次找到一對就可以按分為左右兩個子問題遞歸解決。從右往左看,作為決定最小單位的符號,每次遇到一個,就拆解離最近的兩個小單位。宏觀上看是,從小到大。
Given a string representing arbitrarily nested ternary expressions, calculate the result of the expression. You can always assume that the given expression is valid and only consists of digits 0-9, ?, :, T and F. #1 Input: "F?1:T?4:5" Output: "4" Explanation: The conditional expressions group right-to-left. Using parenthesis, it is read/evaluated as: "(F ? 1 : (T ? 4 : 5))" "(F ? 1 : (T ? 4 : 5))" -> "(F ? 1 : 4)" or -> "(T ? 4 : 5)" -> "4" -> "4" #2 Input: "T?T?F:5:3" Output: "F" Explanation: The conditional expressions group right-to-left. Using parenthesis, it is read/evaluated as: "(T ? (T ? F : 5) : 3)" "(T ? (T ? F : 5) : 3)" -> "(T ? F : 3)" or -> "(T ? F : 5)" -> "F" -> "F"
? : 所組成的最小單位,可以看作一對括號。 ?類似(, :類似 )。
從左往右看,:作為決定一組完整最小單位的符號。每次找到一對就可以按:分為左右兩個子問題遞歸解決。
宏觀上看是從大到小拆開,從小到大遞歸回去。
public class Solution { public String parseTernary(String expression) { if(expression == null || expression.length() == 0){ return expression; } char[] exp = expression.toCharArray(); return DFS(exp, 0, exp.length - 1) + ""; } public char DFS(char[] c, int start, int end){ if(start == end){ return c[start]; } int count = 0, i =start; for(; i <= end; i++){ if(c[i] == "?"){ count ++; }else if (c[i] == ":"){ count --; if(count == 0){ break; } } } return c[start] == "T"? DFS(c, start + 2, i - 1) : DFS(c, i+1,end); } }
從右往左看,? 作為決定最小單位的符號,每次遇到一個?, 就拆解離?最近的兩個小單位。宏觀上看是,從小到大。
public class Solution { public String parseTernary(String expression) { if(expression == null || expression.length() == 0) return ""; Dequestk = new LinkedList<>(); for(int i=expression.length()-1; i >= 0; i--){ char c = expression.charAt(i); if(!stk.isEmpty() && stk.peek() == "?"){ stk.pop(); // pop ? char first = stk.pop(); stk.pop(); // pop : char second = stk.pop(); if(c == "T") stk.push(first); else stk.push(second); } else { stk.push(c); } } return String.valueOf(stk.peek()); } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/66938.html
摘要:原文地址今天我發(fā)現(xiàn)了三元運(yùn)算符的一個小小的用法這給我干涸的大腦一點(diǎn)樂趣三元運(yùn)算符是對參數(shù)賦值時候的一個簡潔的主要用法一個主要的用法三元運(yùn)算符能夠讓你在一行代碼中描述判定代碼從而替換掉類似以下的代碼使用以下代碼替代第二個代碼例子是非常簡潔的用 原文地址 Even shorter ternary operators in PHP using ?: 今天我發(fā)現(xiàn)了PHP三元運(yùn)算符的一個小小的用...
摘要:負(fù)責(zé)讀取和記錄當(dāng)前代碼的位置,并把讀取到的代碼交給處理,其意義在于,當(dāng)傳遞給的代碼需要進(jìn)行判讀猜測時,能夠記錄當(dāng)前讀取的位置,并在接下來的操作匯總回滾到之前的讀取位置,也能在發(fā)生語法錯誤時,準(zhǔn)確指出錯誤發(fā)生在代碼段的第幾行第幾個字符。 上一篇(《如何編寫簡單的parser(基礎(chǔ)篇)》)中介紹了編寫一個parser所需具備的基礎(chǔ)知識,接下來,我們要動手實(shí)踐一個簡單的parser,既然是簡...
摘要:對于布爾值類型,如果至少有一個節(jié)點(diǎn)與表達(dá)式匹配,則求值結(jié)果返回,否則返回如果有節(jié)點(diǎn)匹配,則返回和方法以上輸出與語法匹配的節(jié)點(diǎn)數(shù)量默認(rèn)類型結(jié)果常量可以自動確定返回結(jié)果的類型。 XPath是設(shè)計用來在DOM文檔中查找節(jié)點(diǎn)的一種手段,因而對XML的處理也很重要。很多瀏覽器實(shí)現(xiàn)了這個標(biāo)準(zhǔn),IE有自己的實(shí)現(xiàn)方式。 DOM3級XPath 下面的代碼是用來檢測瀏覽器是否支持DOM3級的XPath: ...
摘要:對于布爾值類型,如果至少有一個節(jié)點(diǎn)與表達(dá)式匹配,則求值結(jié)果返回,否則返回如果有節(jié)點(diǎn)匹配,則返回和方法以上輸出與語法匹配的節(jié)點(diǎn)數(shù)量默認(rèn)類型結(jié)果常量可以自動確定返回結(jié)果的類型。 XPath是設(shè)計用來在DOM文檔中查找節(jié)點(diǎn)的一種手段,因而對XML的處理也很重要。很多瀏覽器實(shí)現(xiàn)了這個標(biāo)準(zhǔn),IE有自己的實(shí)現(xiàn)方式。 DOM3級XPath 下面的代碼是用來檢測瀏覽器是否支持DOM3級的XPath: ...
閱讀 637·2023-04-26 01:53
閱讀 2762·2021-11-17 17:00
閱讀 2897·2021-09-04 16:40
閱讀 1999·2021-09-02 15:41
閱讀 848·2019-08-26 11:34
閱讀 1236·2019-08-26 10:16
閱讀 1344·2019-08-23 17:51
閱讀 834·2019-08-23 16:50