leetcode 5回文

下面是python版 执行用时40ms 哭

class Solution:
    def longestPalindrome(self, s: str) -> str:
        huiwen_zong = []
        if len(s)==0:
            return "字符串为空"
        elif len(s) == 1:
            return s
        elif len(s) == 2:
            if s[0] == s[1]:
                return s
            else:
                return s[0]
        for i in range(1,len(s)-1):  # 对每一个字符进行循环
            huiwen = [s[i]]
            huiwen1 = [s[i]]  # 判断第二个
            index1 = i-1
            index2 = i+1
            for j in range(len(s[i:])): # 以这个字符为起点进行查找
                if s[index1] == s[index2]:
                    huiwen.insert(0, s[index1])
                    huiwen.append(s[index2])
                    --index1
                    ++index2
                    if --index1<0:
                        break
                else:
                    break
            
                if s[i] == s[i+1]:
                    index3 = i-1
                    index4 = i+2
                    huiwen1.append(s[i+1])
                    for j in range(len(s[i:])):
                        if s[index3] == s[index4]:
                            huiwen1.insert(0, s[index3])
                            huiwen1.append(s[index4])
                            --index3
                            ++index4
                            if index3<0:
                                break
                        else:
                            break
            if len(huiwen)>=len(huiwen1):
                huiwen_zong = huiwen
            else:
                huiwen_zong = huiwen1
            string_huiwen = ''
            for i in huiwen_zong:
                string_huiwen = string_huiwen+i

        return string_huiwen

C++ 版 用时为0

class Solution {
public:
    string longestPalindrome(string s) {
         int len=s.length();
        string result="";
             int left=-1;           //声明左右游标
             int right=-1;
        if(len==0)
            return result;
        for(int i=0;i<len;i++){
   
            //这里存在字符串判断条件太苛刻了,并不只有这两种情况
            //形如“sssss”子串应该是“sssss"应该走else
            //但是满足if条件
 
            if(s[i]==s[i+1]){      //对称点是偶数点
                 left=i;
                 right=i+1;
            }else{                 //对称点是奇数点
                 left=i;
                 right=i;
            }
            while(left>0&&right<len-1&&s[left-1]==s[right+1]){
                left--;
                right++;
                }
            if(right-left+1>result.length()){
                result=s.substr(left,right-left+1);//返回子串
            }    
            
        }
    
        return result;
 
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值