程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [LeetCode] Longest Substring Without Repeating Characters

[LeetCode] Longest Substring Without Repeating Characters

編輯:C++入門知識

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.

問題描述:給定一個字符串,找到這個字符串中沒有重復字符的最長子串的長度。比如,給定字符串abcabcbb,最長的不重復的字符串就是abc,長度為3,給定字符串為bbbbb,只有一個字符b,長度為1。

最簡單的想法就是,找到所有的沒有重復字符的子串,得到最大的長度。用一個hash表存儲當前正在判斷的字符串的不重復的字符,用兩個迭代器得到一個區間,當第二個迭代器的字符不在hash表中,說明該字符是不重復的字符,那麼就遞增第二個迭代器,並將該字符加入到hash表中,否則,就獲取hash表的長度,這就是當前的不重復字符串的長度,與已經得到的最長的長度進行比較,然後清空hash表,遞增第一個迭代器,並將第二個迭代器置為第一個迭代器。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        if(s.empty())
			return 0;

		set hash;
		unsigned long n = 0;
		string::iterator start = s.begin();
		string::iterator iter = s.begin();

		while(start != s.end()) {
			if(iter != s.end() && hash.find(*iter) == hash.end()) {
				hash.insert(*iter);
				++iter;
			}
			else {
				if(hash.size() > n) {
					n = hash.size();
				}
				if(iter == s.end())
				    break;
				hash.clear();
				++start;
				iter = start;
			}
		}
		return n;
    }
};

上面的判斷過程中,如果找到一個重復的字符,就將區間的起始位置下移一個位置,如果能夠利用已經判斷的結果就好了。其實,如果找到一個重復字符,就可以直接將起始位置置為當前區間中的那個重復字符的下一個位置。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        if(s.empty())
			return 0;

		unsigned long n = 0;
		string::iterator start = s.begin();
		string::iterator iter = s.begin(), find_iter;

		while(start != s.end()) {
			if(iter != s.end() && (find_iter = find(start, iter, *iter)) == iter) {
				++iter;
			}
			else {
				if(iter - start > n) {
					n = iter - start;
				}
				if(iter == s.end())
					break;
				start = find_iter + 1;
				iter = start;
			}
		}
		return n;
    }
};


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved