天天看點

LeetCode OJ 之 Longest Substring Without Repeating Characters 解題報告

題目: Longest Substring Without Repeating Characters

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.

Solution:

class Solution {
public:
    int lengthOfLongestSubstring(string str){
		int result = 0;
		int temp_res = 0;
		int rec_arr[128];
		memset(rec_arr, 0, sizeof(rec_arr));
		for (int i = 0; i < str.length(); i++)
		{
			temp_res = 0;
			memset(rec_arr, 0, sizeof(rec_arr));
			for (int j = i; j < str.length(); j++)
			{
				if (str[j] >= 128 || str[j] < 0)
				{
					continue;
				}
				if (rec_arr[str[j]] != 0)
				{
					break;
				}
				else
				{
					rec_arr[str[j]]++;
					temp_res++;
				}
			}
			if (temp_res > result)
			{
				result = temp_res;
			}
		}
		return result;
	}
};
           

思路:

題目要求求給定字元串中無重複字元的最長子串的長度。

則從字元串的每一個位置依次向後開始周遊,與出現次數的數組成員比較,到出現相同字元時停止或者字元串結尾停止。在此之前如不相同,則将記錄出現次數的數組相應成員進行自增操作。

收獲:

1.在對數組進行初始化時,使用memset函數,應注意:memset的填充是以位元組為機關的,如果你的數組元素不是單個位元組的,填充成别的值就會出錯隻能填充0或者空值,可 自行驗證這一結論。另外,在以後應該熟練使用memst函數對數組進行清零操作。

2.在字元串的進行中應熟練掌握Ascii碼,在這道題中使用Ascii碼更加簡單