私の解決策はBig0の複雑さを見つける必要があります。LeetCode problem。このアルゴリズムの複雑さはどれくらいですか
繰り返し文字が検出されたときにキューから繰り返し削除されるため複雑さを評価することはできません。文字列を通過するforループが1つあるためO(n)にする必要があります。
問題の要点やご参考のために私の解決策を投稿:文字列が与えられ
、 繰り返し文字なしで最長の部分文字列の長さを見つけます。
例:、答えは長さが1の長さと、3
考える "BBBBB"、答えは "B" である "ABC" が、 "abcabcbb" 考える
あります。 「pwwkew」を考える
が、答えは 答えは部分文字列でなければならないことに留意されたいの長さで、「WKE」で、「pwkeは」サブではなく ストリングです。
私のソリューション:
import java.util.Hashtable;
public class Solution {
public int lengthOfLongestSubstring(String s) {
Queue<Character> q = new LinkedList<Character>();
Hashtable<Character, Boolean> chars = new Hashtable<Character, Boolean>();
int maxLen = 0;
for (int i = 0; i < s.length(); i++)
{
char ch = s.charAt(i);
if (!chars.containsKey(ch))
{
q.add(ch);
chars.put(ch,true);
}
else
{
int len = q.size();
System.out.println(len);
while(q.peek()!=ch)
{
chars.remove(q.remove());
}
q.remove();
q.add(ch);
if (len > maxLen)
maxLen = len;
}
}
if (q.size() > maxLen)
return q.size();
return maxLen;
}
}
しかし、whileループには繰り返し呼び出すことができるwhileループもあります。違いはありませんか? –
私はウェブサイトのソリューションを見ていて、あなたのものではありませんでした。その場合、whileループの最悪のケースは何か分かりますか? if/elseをelse節に入れてwhileループをn回実行するという例がありますか? – Developer