[🤔Code Kata]1week-2


-DAY3-


最初の週の最高難易度...カチッと鳴らす😭
<質問>
String型str因子の中で重複しないアルファベットからなる最長単語の長さを返してください.
str:テキスト
return:重複しないアルファベットの長さ(数値を返す)
例:
  • str="abcabcabc"(戻る3)=>"abc"が最も長いのは、
  • str="aaaa"(1を返す)=>"a"が最も長いため、
  • str="sttrg"(3を返す)=>"trg"が最も長いため、
  • 方法


    近づくにしても何でも、40分かけて1時間のコードカタで問題を理解しました.😭😭 俺はバカか...
    問題を理解して、まず思い浮かぶのは、重複する単語を基準に単語を切り分けることです.
    空のリストを作って、単語ごとに一番長いものを選びましょうか?近づいてみる
    def get_len_of_str(s):
      a = []
      for i in s:
    私が惨めに残したコードは...
    スライドした単語をそれぞれ結果値に抽出する方法は知っていますが...これを単独でリストに載せるべきか分からず、しばらくうろうろしていたらコードカタが終わり・・ううう

    他の同期の問題を解決する方法

    def get_len_of_str(s):
        word = ''  
        word_list = [] 
        if s == '':
            return 0
        for i in s:
            if i not in word:
                word += i
                if i == s[-1]:
                    print(word)
                    word_list.append(word)
            else:
                word_list.append(word)
        answer = len((max(word_list, key=len)))
      
        return answer
    似たような論理で近い同世代のコードを見て、頭をたたいた.word = '' です.
    空文字列だとは思わなかったのですが、答えはここにあり、鬱陶しい気持ちが一気に明るくなりました(かっこいい元熙様).👍)

    solution

    def get_len_of_str(s):
        dct = {}
        max_so_far = curr_max = start = 0
        for index, i in enumerate(s):
        	if i in dct and dct[i] >= start:
                max_so_far = max(max_so_far, curr_max)
                curr_max = index - dct[i]
                start = dct[i] + 1
            else:
                curr_max += 1
            dct[i] = index
        return max(max_so_far, curr_max)
    知らない方法で探してみた
    Enumerateとは?
    この関数は、順序付きデータ型(リスト、凡例、文字列)を入力として受け入れ、インデックス値を含む列挙オブジェクトを返します.
    for i, name in enumerate(['body', 'foo', 'bar']):
    ...     print(i, name)
    ...
    0 body
    1 foo
    2 bar
    上記の例に示すように、列挙をfor文とともに使用すると、データ型の現在の順序(index)とその値を容易に知ることができる.オブジェクトの現在の位置(文など)を示すインデックス値が必要な場合は、列挙関数を使用すると便利です.
    変数max so far=cur max=start=0を同時に指定し、ディックシーケンスと列挙を使用して値を与えます.
    100%感じられるものではなく、かなり複雑ですよね?と思っていたのですが、アルゴリズムを考える時間なので、書かれたコードがかっこいいとは嘆き難いです.👍👍
    私もきっと…!!いつか!🔥

    -DAY4-


    数値numをパラメータとして渡す場合は、反転した形状がnumと同じかどうかを返します.
    num:数値
    return:true or false(反転した形状がnumと同じかどうか)
    たとえば、
  • num = 123
    return false=>反転形状は321であるため、
  • num = 1221
    return true=>反転形状は1221であるため、
  • num = -121
    return false=>反転形状が121-であるため、
  • num = 10
    return false=>反転形状が01のため
  • 方法


    まずは思ったより簡単かな?と思ったのですが(柿…)
    DAY 2で出会った問題が頭に浮かんだので[::-1]を利用する方法ですが、今回も利用することにしました.
    def same_reverse(num):
      re = str(num)[::-1]
      
      if re == str(num):
        return True
      else:
        return False

    前日は思いもよらなかった7銭...

    solution

    def same_reverse(num):
    	num =str(num)
    	is_palindrome = True
    	for i in range(len(num) // 2):
    		if num[i] != num[-1 - i]:
    			is_palindrome = False
    			
    	return is_palindrome
    rangeを使用して、前後の比較でインデックスを解きます.
    こんな考えがあるなんて...?
    アルゴリズムは本当に熟考する必要があると思います...ははは
    コードスタンプにも同様の解題方法がありますが、後で見て必ず体得してください!

    -DAY5-


    今週中が一番難しいです.😞😞😞
    strsは単語を含む配列です.
    共通の開始語(prefix)を返してください.
    例:
  • strs = ['start', 'stair', 'step']
    returnは「st」
  • strs = ['start', 'wework', 'today']
  • 」に戻ります.

    方法

    def get_prefx(strs):
      if strs ==[]:
        return ‘’
      else:
        prefix = ‘’
        strs = sorted(strs)
        for i in (strs[0]):
          if strs[-1].startswith(prefix+i):
            prefix += i
          else:
             break
        return prefix
    Code Kataのような同期で検索する方法はstartswith()である.
    まだわからないうちに道理をわきまえた
    str(or tuple).startswith(開始文字、開始点)
    startswithは、文字列が特定の文字で始まるかどうかを示す方法です.大文字と小文字を区別し、結果値はTrue/Falseを返します.
    また、パラメータ値にtupleのみが含まれ、listまたはdictが含まれている場合はエラーが発生します.(tupleを使用する場合、stringから始まる文字列にtupleがある場合はtrueを返します.)
    string = "hello startswith"
    print(string.startswith("hello"))
    # >>True
    string = "hello startswith"
    print(string.startswith("Hello"))
    # >>False
    もう1つのendswith(終了した文字、文字列の開始、文字列の終了)方法は、特定の文字列で終了するかどうかを決定するために使用される.

    別の同期ブランチの解析

    def get_prefix(strs):
      sorted_strs = sorted(strs)
      if strs == []:
        return ''
      if sorted_strs[0][0] != sorted_strs[-1][0]:
        return ''
      if len(sorted_strs[0]) > len(sorted_strs[-1]):
        shortest = len(sorted_strs[-1])
      elif len(sorted_strs[0]) <= len(sorted_strs[-1]):
        shortest = len(sorted_strs[0])
      answer = []
      for i in range(shortest):
        if sorted_strs[0][i] == sorted_strs[-1][i]:
          answer.append(sorted_strs[0][i])
      print(answer)  
      return ''.join(answer)
    これも不思議ですね.
    初めて見たsorted_strs[0][0]!
    まずアルファベット順に分類し、if文で最初の単語と最後の単語の頭文字が同じかどうかを計算します.
    もしあなたがドアが長くて多いと言ったら、私から見ればあなたはよく編んでいますね.勉強させてください.

    solution

    def get_prefix(strs):
        if len(strs) == 0:
            return '' 
        res = ''
        strs = sorted(strs)
        for i in strs[0]:
            if strs[-1].startswith(res+i):
                res += i
            else:
                break
        return res
    同時期の回答と完全一致!(わあ)
    アプローチは理解できましたが、コードを100%生成できないので、来週復習することにしました!
    がんばれ~~~!