给一个字符串,包含各种字母和标点的,求最长的连续的不包含同种字符的字符串的长度,典型的尺取法。
C++:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.length()==0)return 0;
int cur[300];
memset(cur,0,sizeof(cur));
int l=0,r=0;
int ans=0,curans=0;
while(l<=r&&r<s.length()){
if(cur[s[r]]==0){
cur[s[r]]++;
r++;
curans+=1;
ans=max(ans,curans);
}
else{
cur[s[l]]-=1;
curans-=1;
l++;
}
}
return ans;
}
};
java:
对一个数组快速赋值用Arrays.fill(a,0)
字符串访问元素要用s.charAt(i)
比较二者大小用Math.max(a,b)
public class Solution {
public int lengthOfLongestSubstring(String s) {
if(s.length()==0)return 0;
int cur[]=new int[300];
Arrays.fill(cur, 0);
int l=0,r=0;
int ans=0,curans=0;
//
while(l<=r&&r<s.length()){
if(cur[s.charAt(r)]==0){
cur[s.charAt(r)]++;
r++;
curans+=1;
ans=Math.max(ans, curans);
}
else{
cur[s.charAt(l)]-=1;
curans-=1;
l++;
}
}
return ans;
}
}
Python:
初始化数组为100个0
a=[0 for x in range(100)]
用a=range(100)会得出0-99,用range(1,100)得出1-99
a=[[0 for x in range(10)] for y in range(10)]定义一个10*10的二维数组初始化为0
a=[0]*100可以定义出一个大小100的0数组
a=[[0]*10]*10看起来能定义出一个10*10的二维数组,但是我们发现修改其中的一维的数据,其他维的也会被跟着修改,所以这并不是真正意义上的二维数组
此外ord(char)是获取字符的ascll码,chr(int)是获取一个ascll码的字符
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
if s.__len__()==0:return 0;
cur=[0]*300
l=0;r=0;ans=0;curans=0
while(r<s.__len__() and l<=r):
if cur[ord(s[r])]==0:
cur[ord(s[r])]+=1
r+=1
curans+=1
ans=max(ans,curans)
else:
cur[ord(s[l])]-=1
curans-=1
l+=1
return ans