兑换了一个力扣鼠标垫

兑换了一个力扣鼠标垫

兑换了一个力扣鼠标垫_第1张图片

说来也算是无心插柳,自己作为半个转行仔,一开始压根不知道什么 leetcode 。工作会在网上了解到算法数据结构的重要性,才慢慢的进入力扣开始做题。也没有具体的学习规划,只时不时做几题玩玩。时间久了积分就上去了(当然水平依旧很普通)。再后来知道积分可以兑换东西,现在刚需一个鼠标垫就顺手兑换了。

谈一下对算法和数据结构的看法

作为一个普通的java web仔,从java web这个方向来讲的话,我觉得懂得常见的一些算法数据结构就差不多了。平时也还是以完成业务功能,解决工作中的实际问题为主。不过多做做题锻炼锻炼脑子也不错,编程能力也确实会有所提升。

事实上我遇到笔试或者做力扣每日一题经常有不会做的情况,感觉也不用太在意,其实这和八股文一样,除了证明你最近背过这个东西外,也没啥其他的意义。

但是现在行业的人太多了,招聘要求越来越高,对于稍微好点的公司,如果没有和公司匹配或者比较不错的项目经历,其他方面也没啥亮点,那算法也许就是最后一根救命稻草了。

最后分享一下我开始做力扣题时印象最深的一道题。

力扣第五题: 最长回文子串,因为当时一开始做了几道题,各种不会,想放弃了。直到做出了这题,
比一些优秀题解还快点,才有了兴趣坚持下来。

class Solution {

    char[] chs;

    int skipSize = 0;

    int resSize = 0;

    String res = "";

    public String longestPalindrome(String s) {
        chs = s.toCharArray();
        for (int i = 0; i < chs.length; i++) {
            matchLeftAndRight(i);
            //跳过右侧相同字符
            i += skipSize;
        }
        return res;
    }

    private void matchLeftAndRight(int idx) {
        int leftIdx = idx - 1;
        int rightIdx = idx + 1;
        //如果右边有相同的字符,右移
        while (rightIdx < chs.length && chs[rightIdx] == chs[idx]) {
            rightIdx++;
        }
        //记录跳过相同的字符的个数
        skipSize = rightIdx - idx - 1;
        while (leftIdx >= 0 && rightIdx < chs.length && chs[leftIdx] == chs[rightIdx]) {
            leftIdx--;
            rightIdx++;
        }
        leftIdx++;
        rightIdx--;
        int cuStrSize = rightIdx - leftIdx + 1;
        if (cuStrSize <= resSize) {
            return;
        }
        resSize = cuStrSize;
        res = new String(chs, leftIdx, cuStrSize);
    }
}

你可能感兴趣的:(java,算法,数据结构,leetcode,算法,职场和发展)