leetcode记录-字符串系列

3Longest Substring Without Repeating Characters(medium)

题意:Given “pwwkew”, the answer is “wke”, with the length of 3. Note that the answer must be a substring。注意了,这道题是求最长的子字符串的长度,而不是序列

思路1:每次循环判断都是独立,不利用前面判断过的信息。利用一个256大小数组,如果有字符出现两次终止当次循环,判断max_length长度。进行n次这样的循环

思路2:利用前面判断的信息。

        for(end=1;endend++)
        {
            flag=0;
            for(now=begin;now<end;now++)
            {
                if(s[now]==s[end])
                {
                    max_length=max(max_length,end-begin);
                    begin=now+1;
                    flag=1;
                    break;

                }
            }
            if(flag==0)
            {
                max_length=max(max_length,end-begin+1);
            }
        }

5 Longest Palindromic Substring(最长的回文子串)(medium)

思路1:中心扩展法

分为回文子串长度为奇数
回文子串长度为偶数
中心从i=1:n-1,可以得到以i为中心的最长的回文子串的长度

思路2:动态规划法

用一个n*n矩阵保存子串Si,j是否是回文子串
Si,j=0 if(ai!=aj || Si+1,j-1==0)
Si,j=1 if(ai==aj && Si+1,j-1==1)
先要将矩阵Si,i保存为1,Si,j+1的值求出,在进行后续操作

6 ZigZag Conversion (easy)

题意:Z字形表示输入的字符串,按照行得到要求的字符串

思路:这道题其实质就是找规律的题目,自己在纸上可以得到其规律。Z形为n行,r=2*n-2就是一个循环。第一行和最后一行在一个循环中只有一个数字,中间的行数有两个数字。 所以要分三种情况考虑(1)第一行,是s[0] s[r] s[2*r]…..
(2)中间行,s[i],s[r-i],s[r+i],s[2*r-i]…..
(3)最后一行,s[n-1],s[r+n-1],s[2*r+n-1]…..

10Regular Expression Matching(hard)
这道题,正则表达式匹配。规则:. 代表任意的一个字符 * 匹配前面字符0个1个或多个.难点就是在于*的匹配

思路:string s, string p
当p为空时,返回s是否为空的bool值
当s为空时,判断p[1]==’*’ true isMatch(s,p.substr(2)); false, return false;

当p.length()>=2 && p[1]==’*’

while(s.length()>0&&p.length()>0 &&(s[0]==p[0] ||p[0]=='.'))
            {
                if(isMatch(s,p.substr(2)))
                    return true;
                s=s.substr(1);
            }
            return isMatch(s,p.substr(2));

else

 if(p[0]!='.' && p[0]!=s[0])
                return false;
            else
                return isMatch(s.substr(1),p.substr(1));

你可能感兴趣的:(Leecode)