题目: 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码更加简单