文字が繰り返されていない最長の部分文字列
問題の説明
文字列を指定して、繰り返し文字を含まない最長の部分文字列の長さを調べてください。
問題解決の考え
unordered_setの使用:
unordered_set <int> c1; //
c1.empty(); //空かどうかを判断
c1.size(); //要素数を取得size()
c1.max_size(); //最大ストレージを取得max_size()
c1.find(key); // unordered_setのfind()を呼び出すと、イテレータが返されます。このイテレータは、パラメータのハッシュ値に一致する要素を指します。一致する要素がない場合は、コンテナの終了イテレータend()を返します。
c1.insert(key); //要素を挿入
c1.erase(key); //キー値に従って要素を削除
c1.clear(); //空の
c1.count(key)//発生回数を返すコンテナ内の要素
スライディングウィンドウのアイデア:繰り返されない文字の部分文字列がi番目の文字で始まると仮定すると、i番目の文字はウィンドウの最初の要素にあります。新しく追加された文字が要件を満たしていない場合、ウィンドウが1つ右に移動します。i番目の文字を絞り出します。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int n=s.size();
if(n == 0) return 0;
unordered_set<char> lookup;
int res = 0,start = 0;
for(int i = 0; i < n; i++){
while (lookup.find(s[i]) != lookup.end()){
//若在容器中找到了相应的元素则执行
lookup.erase(s[start]);
start++;
}
res = max(res,i-start+1);
lookup.insert(s[i]);
}
return res;
}
};