LeetCode-10 Regular Expression Matching

兩種思路,第一種遞歸法。

public boolean isMatch(String s, String p) {
        //首先判斷pattern為空的情況
        if (p.isEmpty()){
            return s.isEmpty();
        }
        //處理pattern長度為1的情況
        if (p.length()==1){
            //s的長度必須為1
            if (s.length() != 1){
                return false;
            }
            else
                return p.charAt(0)==s.charAt(0) || p.charAt(0)=='.';
        }
        //處理pattern長度大于1的情況
        //情況1:如果pattern的第二位不為*,那么只需要匹配一位
        if (p.charAt(1) != '*'){
            //考慮s的長度
            if (s.isEmpty()){
                return false;
            }
            else
                //需要同時滿足兩個條件:1.第一位相同;2.從第二位開始匹配結(jié)果也為true
                return (p.charAt(0)==s.charAt(0) || p.charAt(0)=='.') && isMatch(s.substring(1),p.substring(1));
        }
        //下面處理第二位為*的情況 這時不能立即判斷s是否為空,因為可能存在*匹配了零次的情況
        else{
            while (!s.isEmpty() && (p.charAt(0)==s.charAt(0) || p.charAt(0)=='.')){
                //處理*為重復零次的情況
                if (isMatch(s,p.substring(2))){
                    return true;
                }
                //如果*不是匹配零次,則從
                s = s.substring(1);
            }
        }
        return isMatch(s,p.substring(2));
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容