1408.配列内の文字列マッチング
stringの配列を指定します words
。words
別の単語の部分文字列であるすべての文字列を任意の順序で返します 。
文字列 words[i]
はの部分文字列ですが words[j]
、の左側または右側、あるいはその両方の一部の文字を削除して取得できる場合 words[j]
。
例1:
入力:単語= ["質量"、 "as"、 "ヒーロー"、 "スーパーヒーロー"] 出力:["as"、 "hero"] 説明:「as」は「mass」のサブストリングであり、「hero」は「superhero」のサブストリングです。 ["hero"、 "as"]も有効な回答です。
例2:
入力:単語= ["leetcode"、 "et"、 "code"] 出力:["et"、 "code"] 説明:「et」、「code」は「leetcode」のサブストリングです。
例3:
入力:単語= ["青"、 "緑"、 "bu"] 出力:[]
制約:
1 <= words.length <= 100
1 <= words[i].length <= 30
words[i]
小文字の英字のみが含まれています。- それ
words[i]
がユニークになることが保証されてい ます。
コード:
vector < string > Solution :: stringMatching(vector < string >&words){ ベクトル < 文字列 > ans; int len = words.size(); for(int i = 0 ; i <len; ++ i){ for(int j = i + 1 ; j <len; ++ j){ if(words [i] .find(words [j])!= string :: npos){ ans.push_back(words [j]); } if(words [j] .find(words [i])!= string :: npos){ ans.push_back(words [i]); } } } ansを返します。 }
1409.キーを使用した置換に関するクエリ
配列を指定して queries
の間には正の整数の 1
と m
、あなたがすべて処理しなければならない queries[i]
(から i=0
までを i=queries.length-1
次の規則に従って):
- 最初は順列があり
P=[1,2,3,...,m]
ます。 - 現在の場合は
i
、の位置を見つけるqueries[i]
順列にP
(0からインデックス)、その後、順列の最初にこれを動かすP.
の位置ということに注意してくださいqueries[i]
ではP
用の結果ですqueries[i]
。
指定されたの結果を含む配列を返し queries
ます。
例1:
入力:クエリ= [3,1,2,1]、m = 5 出力:[2,1,2,1] 説明:照会は次のように処理されます: i = 0の場合:query [i] = 3、P = [1,2,3,4,5]、P内の3の位置は2、次に3をPの先頭に移動してP = [3、 1,2,4,5]。 i = 1の場合:クエリ[i] = 1、P = [3、1、2、4、5]、Pの1の位置は1、次に1をPの先頭に移動してP = [1、 3,2,4,5]。 i = 2の場合:query [i] = 2、P = [1,3,2,4,5]、P内の2の位置は2、次に2をPの先頭に移動してP = [2、 1,3,4,5]。 i = 3の場合:query [i] = 1、P = [2,1,3,4,5]、Pの1の位置は1、次に1をPの先頭に移動してP = [1、 2,3,4,5]。 したがって、結果を含む配列は[2,1,2,1]です。
例2:
入力:クエリ= [4,1,2,2]、m = 4 出力:[3,1,2,0]
例3:
入力:クエリ= [7,5,5,8,3]、m = 8 出力:[6,5,0,7,5]
制約:
1 <= m <= 10^3
1 <= queries.length <= m
1 <= queries[i] <= m
コード:
クラスSolution { public : vector < int > processQueries(vector < int >&querys 、int m){ vector < int > ans; int len = query.size(); ベクトル < int > P(m、0 ); for(int i = 1 ; i <= m; ++ i){ P [i - 1 ] = i; } int pos、temp; for(int i = 0 ; i <len; ++ i){ for(int j = 0 ; j <m; ++ j){ if(P [j] == querys [i]){ pos = j; ans.push_back(j); 休憩; } } temp = P [pos]; for(int j = pos; j> 0 ; -j){ P [j] = P [j- 1 ]; } P [ 0 ] = 温度; } ansを返します。 } };
1410. HTMLエンティティパーサー
HTMLエンティティパーサーは、HTMLコードを入力として受け取り、特殊文字のすべてのエンティティを文字自体で置き換えるパーサーです。
HTMLの特殊文字とそのエンティティは次のとおりです。
- 引用符:エンティティはで
"
、記号文字は"
です。 - 一重引用
'
符:エンティティはで 、記号文字は'
です。 - アンパサンド:エンティティはで
&
、シンボル文字は&
です。 - より大きい記号:エンティティはで
>
、記号文字は>
です。 - 小
<
なり記号:エンティティはで 、記号文字は<
です。 - スラッシュ:エンティティはで
⁄
、記号文字は/
です。
text
HTMLパーサーへの入力 文字列を指定すると、エンティティパーサーを実装する必要があります。
エンティティを特殊文字に置き換えた後、テキストを返し ます。
例1:
入力:text = "&amp;はHTMLエンティティですが、&ambassador;はそうではありません。" 出力:「&はHTMLエンティティですが、&ambassador;はそうではありません。」 説明:パーサーが&amp;を置き換えます。&によるエンティティ
例2:
入力:テキスト= "そして私は引用:&quot; ...&quot;" 出力:「そして私は引用します:\ "... \"」
例3:
入力:text = "Stay home!Leetcodeの練習:)" 出力:「Stay home!Leetcodeの練習:)」
例4:
入力:text = "x&gt; y&amp;&amp; x&lt; yは常にfalseです" 出力: "x> y && x <yは常にfalseです"
例5:
入力:text = "leetcode.com&frasl; problemset&frasl; all" 出力: "leetcode.com/problemset/all"
制約:
1 <= text.length <= 10^5
- 文字列には、256文字のASCII文字のうち、可能な文字を含めることができます。
コード:
クラスSolution { public String entityParser(String text){ text = text.replace( "&quot;"、 "\" " ); text = text.replace( "&apos;"、 "'" ); text = text.replace( "&amp;"、 "&" ); text = text.replace( "&gt;"、 ">" ); text = text.replace( "&lt;"、 "<" ); text = text.replace( "&frasl;"、 "/" ); テキストを返す; } }
1411. N×3グリッドをペイントする方法の数
あなたは持っている grid
サイズのを n x 3
、あなたは三色の正確に一つでグリッドの各セルをペイントする:どの2個の隣接するセルが同じ色(すなわちなし2つの細胞株の縦または横のそれを持っていないことを確認しながら赤、黄や緑側面は同じ色です)。
n
グリッドの行数が与えられ ます。
これをペイントする方法の数を返し ます grid
。答えが大きくなる可能性があるため、答えはmoduloで計算する必要があります 10^9 + 7
。
例1:
入力:n = 1 出力:12 説明:グリッドを表示するには、次の12通りの方法があります。
例2:
入力:n = 2 出力:54
例3:
入力:n = 3 出力:246
例4:
入力:n = 7 出力:106494
例5:
入力:n = 5000 出力:30228214
制約:
n == grid.length
grid[i].length == 3
1 <= n <= 5000
コード:
クラスSolution { public : int numOfWays(int n){ long long case1 = 6、case2 = 6 ; long long temp1、temp2; int mod = 1000000007 ; for(int i = 1 ; i <n; ++ i){ temp1 = case1 * 3 + case2 * 2 ; temp2 = case1 * 2 + case2 * 2 ; case1 = temp1%mod; case2 = temp2%mod; } return(case1 + case2)%mod; } };
アイデア:
3つの正方形の色が異なる2つのケースがあります。
ケース1:121、131、212、313、323、232(両側に同じ色)
ケース2:123、132、213、231、312、321(3つの正方形には3つの異なる色があります)
前の行がケース1の場合、次の行が条件を満たします(前の行が121であると想定)。
212、313、232、213、312(最初の3つはケース1に属し、最後の2つはケース2に属します)
前の行がケース2の場合、次の行が条件を満たす(前の行が123であると想定)。
212、232、231、312(最初の2つはケース1に属し、最後の2つはケース2に属します)
定義:case1は前の行がcase1である場合を意味し、case2は前の行がcase2である場合を意味し、次の行で
case1 = case1 * 3 + case2 * 2 ; case2 = case1 * 2 + case2 * 2 ;
最初の2つの質問は単純な質問です。3番目の質問はC ++では難しいかもしれません。Javaを使用している場合は、数行で十分です。4番目の質問は、動的プログラミングの難しい問題であると考えられています。