ARTS第二周

2019-03-31  本文已影响0人  leo小超

Algorithm

leetcode125(125. Valid Palindrome),判断是否回文,只考虑a-z、0-9、A-Z,忽略大小写
第一个思路,一看到回文,就想到栈,先去掉无用字符,再用栈判断是否回文,刚下笔写到stringbuilder,想到如果字符串很长,stirngbuilder
会复制一份string占用很大内存。接着想到上一篇写的一左一右指针,然后放弃第一个思路用第二种方法
第二个思路,左指针从左到右走,右指针从右往左走,然后比较。左右指针遇到了,回文了。

code
public boolean isPalindrome(String s) {
        Character ci;
        Character cj;
        for (int i = 0, j = s.length() -1; i < s.length() && j >= 0; i++) {
            if (i == j) {
                return true;
            }
            ci = s.charAt(i);
            if (ci >= '0' && ci <= '9') {
                for (; j >= 0; j--) {
                    if (i == j) {
                        return true;
                    }
                    cj = s.charAt(j);
                    if (cj >= '0' && cj <= '9') {
                        if (ci == cj) {
                            j--;
                            break;
                        } else {
                            return false;
                        }
                    } else if (cj >= 'a' && cj <= 'z' || cj >= 'A' && cj <= 'Z') {
                        return false;
                    }
                }
            } else if (ci >= 'a' && ci <= 'z') {
                for (; j >= 0; j--) {
                    if (i == j) {
                        return true;
                    }
                    cj = s.charAt(j);
                    if (cj >= '0' && cj <= '9') {
                        return false;
                    } else if (cj >= 'a' && cj <= 'z') {
                        if (ci != cj) {
                            return false;
                        } else {
                            j--;
                            break;
                        }
                    } else if (cj >= 'A' && cj <= 'Z') {
                        if (ci - cj != 32) {
                            return false;
                        } else {
                            j--;
                            break;
                        }
                    }
                }
            } else if (ci >= 'A' && ci <= 'Z') {
                for (; j >= 0; j--) {
                    if (i == j) {
                        return true;
                    }
                    cj = s.charAt(j);
                    if (cj >= '0' && cj <= '9') {
                        return false;
                    } else if (cj >= 'a' && cj <= 'z') {
                        if (cj - ci != 32) {
                            return false;
                        } else {
                            j--;
                            break;
                        }
                    } else if (cj >= 'A' && cj <= 'Z') {
                        if (ci != cj) {
                            return false;
                        } else {
                            j--;
                            break;
                        }
                    }
                }
            }
        }
        return true;
    }

Review

java-12-switch-expressions
java 12 新特性switch语法,省略了代码块、临时变量,同时支持表达式。使用--enable-preview 开启特性

Tip

mac上ll查看权限看到权限后面无意中看到有个@,查了是拓展属性
拓展属性操作指令xattr

navicat导出sql文件,使用Tools->Data Transfer 可以将insert语句导成批量插入

Share

最近在极课时间上看《数据结构算法之美》,有看到说一致性hash,不是很懂,自己去了解了下,然后输出一篇一致性hash

上一篇 下一篇

猜你喜欢

热点阅读