ARTS 打卡第三周

Algorithm 做一道leetcode算法题

题目
  1. 最长回文子串
    给你一个字符串 s,找到 s 中最长的回文子串。

示例 1:

输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。

示例 2:

输入:s = “cbbd”
输出:“bb”

示例 3:

输入:s = “a”
输出:“a”

示例 4:

输入:s = “ac”
输出:“a”

提示:

1 <= s.length <= 1000
s 仅由数字和英文字母(大写和/或小写)组成

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring/

解题思路

有个神奇的东西,叫做正则表达式,然后我在网上查了一下正则表达式,发现,正则表达可以匹配回文字符串。

class Solution {

    public String longestPalindrome(String s) {

        //如果长度为一直接返回
        if(s.length() == 1) return s;

        //使用正则表达式
        Pattern p = Pattern.compile("(.*).?\\1");
		Matcher m = p.matcher(s));
		
        String str = "";

        //匹配所有匹配的字符串,找到最长的字符串
		while(m.find()) {
			String mStr = m.group();
            if(mStr.length() > str)
		}

        //返回结果
        return str;
    }
}

结果,执行报错。不能用正则表达式,真是太遗憾了。
不是说这个代码有问题,只是leetcode不能用正则而已。

没办法,只好换一种思路了

然后,我就想了一个办法,我先假设,最大回文字符串长度为整个字符串,然后逐渐的减小长度,再去检验,一旦找到符合结果的,立马返回,得到的就是最大回文字符串了。

class Solution {

    public String longestPalindrome(String s) {

        int len = s.length();
		 int strLen = len;
		 
		 String str = null;
		 
		 while(str == null) {
			 
			 int center = len / 2;
			 for(int i = 0; i + len <= strLen; i++) {
				 
				 String left = s.substring(i,center + i);
				 String right = s.substring(center + i  + len%2,i + len);
				 
				 boolean t = true;
				 for(int j = 0;j < center;j++) {
					 t=left.charAt(j)==right.charAt(center - j - 1);
					 if (!t) {
						break;
					}
				 }
				 
				 if(!t) continue;
				 
				 str = s.substring(i,i + len);
				 break;
			 }
			 len--;
		 }
		 
		 
		 return str;
    }
}

执行效率比较低。我也翻了一下官方题解,感觉都看不明白,脑壳痛。

还有优化空间,不截取字符串,直接在原字符串上用charAt 来比较

 	boolean t = true;
	for(int j = 0;j < center;j++) {
		t=s.charAt(j + i)==s.charAt(i + len - j - 1);
		if (!t) {
			break;
		}
	}

运行时间大幅的提升
在这里插入图片描述

Review 阅读并点评至少一篇英文技术文章

Tips 学习至少一个技术技巧

mysql find_in_set

最近在工作中发现一个mysql的有趣的函数。
这个函数可以匹配逗号隔开的数组
例如
find_in_set( 1 ,‘1,2,3,4’) 成立
find_in_set( 5 ,‘1,2,3,4’) 不成立
这个函数让很多地方写sql灵活了许多
比如,以前写 delete from table where id in (1,2,3,4,5)
就可以写成 delete from table where find_in_set(id,‘1,2,3,4,5’)
这对写sql也许变化不大,但是写程序就方便了很多,可以直接传字符串做参数来实现删除多个的功能

Share 分享一篇有观点和思考的技术文章

前段时间看到pdd上有人猝死,给我很大的震撼。
一个人连续50天996就会死
这样看的话,我差不多是多次游走在死亡边缘了
今年 我差不多一年都在加班,虽然说没到连续加一年这种恐怖。
有时候生命可以很脆弱,加油,打工人

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值