安全offer0507を証明する:一致する正則表現は、数値文字列を表し、文字ストリームは、最初の文字を繰り返しません

正規表現マッチング
対象説明
実装「が一致する機能を備え」と「」正規表現です。モード文字「」いずれかの文字が『は(0時間を含む)任意の回数とすることができる』文字の前に示されています。この問題では、試合全体のパターンが文字列のすべての文字に一致しています。たとえば、文字列「AAA」モードと「AA」と「AB&AC A」試合が、「aa.a」と「abが*」と一致しません

分析:
リンク:https://www.nowcoder.com/questionTerminal/45327ae22b7b413ea21df13ee7d6429c
出典:牛オフネットワーク

第2のモードは、「文字のとき」である:
最初の文字列パターンは2つの文字の後の最初の文字は、シフトモードと一致しない場合は、一致し続けています。最初の文字パターンマッチングを有する第1の文字列場合、モードマッチングの三種類が存在してもよい:
シフト後1、2文字パターン、Xに対応する
無視され、
図2に示すように、モード移行2後の文字列、文字を動かし;
のように3、すなわち、文字列、モード変更を、移動、次の文字にマッチし続け一致の数ができ、
モードが第2文字が「ない場合
」である:
1、最初の文字場合モードと最初の文字は、文字列と文字後方モード、残りの試合に一致します。
最初の文字と、最初の文字パターンが位相と一致しない場合2は、直接、falseを返します。

# -*- coding:utf-8 -*-
class Solution:
    # s, pattern都是字符串
    def match(self, s, pattern):
        # write code here
        if (len(s)==0 and len(pattern)==0):
            return True
        if (len(s)>0 and len(pattern)==0):
            return False
        if (len(pattern)>1 and pattern[1]=='*'):
            if (len(s)>0 and (s[0] == pattern[0] or pattern[0]== '.')):
                return (self.match(s,pattern[2:]) or self.match(s[1:],pattern[2:]) or self.match(s[1:],pattern))
            else:
                return self.match(s,pattern[2:])
        if (len(s)>0 and (pattern[0]=='.' or s[0]==pattern[0])):
            return self.match(s[1:],pattern[1:])
        return False

数値文字列表す
タイトル説明
(整数および分数を含む)数値文字列かどうかを決定するために使用される機能を実装してください。例えば、文字列"100"、 "5E2"、 " - 123"、 "3.1416" と"-1E-16"の値を示しています。しかし、 "12E"、 "1a3.14"、 "1.2.3"、 "±5" と"12E + 4.3"ではありません。

ノートには、Pythonのショートカットを取り、正則表現は、最初のアイデアについて投稿し、理解していない
解決策1:

# -*- coding:utf-8 -*-
class Solution:
    # s字符串
    def isNumeric(self, s):
        # write code here
        try:
            p = float(s)
            return True
        except:
            return False

解決方法2:
リンク:https://www.nowcoder.com/questionTerminal/6f8c901d091949a5837e24bb82a731f2
出典:牛オフネットワーク

いくつかのキーポイント:
基本的な境界1。文字列== NULL || *文字列== ' \ 0'

2.符号ビットかどうかを検出します

唯一の有効なビットまたは小数の符号ビットを除く有効ビットの3検出。

4.かE Eを検出し、繰り返すことはできません

小数点を繰り返すことはできません

6.デジタル正当性など「A」、などの他の文字にすることはできません

链接:https://www.nowcoder.com/questionTerminal/6f8c901d091949a5837e24bb82a731f2
来源:牛客网

class Solution {
public:
    bool isNumeric(char* str) {
        // 标记符号、小数点、e是否出现过
        bool sign = false, decimal = false, hasE = false;
        for (int i = 0; i < strlen(str); i++) {
            if (str[i] == 'e' || str[i] == 'E') {
                if (i == strlen(str)-1) return false; // e后面一定要接数字
                if (hasE) return false;  // 不能同时存在两个e
                hasE = true;
            } else if (str[i] == '+' || str[i] == '-') {
                // 第二次出现+-符号,则必须紧接在e之后
                if (sign && str[i-1] != 'e' && str[i-1] != 'E') return false;
                // 第一次出现+-符号,且不是在字符串开头,则也必须紧接在e之后
                if (!sign && i > 0 && str[i-1] != 'e' && str[i-1] != 'E') return false;
                sign = true;
            } else if (str[i] == '.') {
              // e后面不能接小数点,小数点不能出现两次
                if (hasE || decimal) return false;
                decimal = true;
            } else if (str[i] < '0' || str[i] > '9') // 不合法字符
                return false;
        }
        return true;
    }
};

ユニークな文字のストリームの最初の3つの文字
タイトル説明
文字の最初の文字列を検索するために機能を実装してください一度だけ表示されます。例えば、文字ストリームは最初の2つの文字を読み取ったときに、最初の文字は一度だけ「G」を発生し、「行きます」。文字ストリームから「グーグル」最初の6つの文字を読み出すときは、最初の一つだけの文字が「L」で表示されます。
出力説明:

現在の文字列が文字がある表示されない場合は、#文字を返します。

ノートは;〜、先頭を理解し、コードを読んで、表示されませんでした

# -*- coding:utf-8 -*-
class Solution:
    # 返回对应char
    def __init__(self):
        self.s = ''
        self.dict1 = {}
    def FirstAppearingOnce(self):
        # write code here
        for i in self.s:
            if self.dict1[i] == 1:
                return i
        return '#'
    def Insert(self, char):
        # write code here
        self.s = self.s + char
        if char in self.dict1:
            self.dict1[char] = self.dict1[char] + 1
        else:
            self.dict1[char] = 1

おすすめ

転載: blog.csdn.net/Leia21/article/details/89954477