LeetCode [9-パリンドローム] LeetCode [10-正規表現マッチング]

回文

タイトルの説明

整数が回文かどうかを判別します。パリンドロームの数は、同じ順序(左から右)および逆の順序(右から左)で読み取られる整数を指します。
ここに画像の説明を挿入

問題解決のアイデア

番号の逆順が元の番号と同じかどうかを判断する

コードの実装

class Solution {
public:
    bool isPalindrome(int x) {
        if(x<0)
            return false;
        long num = x;
        long cur = 0;
        while(num)
        {
            cur = cur*10 + num%10;
            num /= 10; 
        }
        return cur == x;
    }
};

正規表現マッチング

タイトルの説明

文字列sと文字パターンpを指定します。「。」と「*」をサポートする正規表現マッチングを実装してください。

'。'は任意の1文字に一致します
'*'は0以上の前の要素に一致します。
いわゆる一致は、文字列の一部ではなく、文字列全体を対象としています。

説明:
sは空で、azからの小文字のみが含まれている可能性があります。
pは空で、azからの小文字と文字と*のみを含むことができます。

ここに画像の説明を挿入
ここに画像の説明を挿入

問題解決のアイデア

  1. sの最初の文字がpの最初の文字と等しい場合、またはpの最初の文字が等しい場合、後者の文字が*ではない場合、最初の文字を削除した後、文字列sを直接調べます文字列は、文字列pから最初の文字を削除した文字列と一致できますか
  2. p文字列の最初の文字の後の文字が*の場合、それは状況を分割する時です:
    2.1 1つは0に一致することであり、pのこれら2つの文字をスキップする必要があるだけで、sに進みます。
    2.2 の文字を比較します。もう1つは複数の文字を一致させることです。次にカーソルをsの1つ後ろに移動し、
    2.3の判断を続けます。これらの2つの条件のいずれかが満たされる限り

コードの実装

class Solution {
public:
    bool isMatch(string s, string p) {
    	//代码完整性
        if (p.length() == 0) 
            return s.length() == 0;
        //第一个字符匹配
        bool match = (s.length() > 0 && (s.at(0) == p.at(0) || p.at(0) == '.'));
        //特殊情况
        if (p.length() > 1 && p.at(1) == '*'){
        	//匹配0个,跳过p中的这两个字符;或多个,s往后移动一个继续匹配
            return isMatch(s, p.substr(2)) || (match && isMatch(s.substr(1), p));
        } else {
        	//一般情况
            return match && isMatch(s.substr(1), p.substr(1));
        }
    }
};
253件の元の記事を公開しました 賞賛されました41 40,000回以上の閲覧

おすすめ

転載: blog.csdn.net/liuyuchen282828/article/details/104596373