publicboolean(String s){ int begin = 0, end = s.length() - 1; while (begin < end) { while (begin < end && Character.isLetterOrDigit(s.charAt(begin)) == false) begin++; while (begin < end && Character.isLetterOrDigit(s.charAt(end)) == false) end--; char first = Character.toLowerCase(s.charAt(begin)); char second = Character.toLowerCase(s.charAt(end)); if (begin < end && first != second) returnfalse; begin++; end--; } returntrue; }
private String ans = ""; privateint max = 0; publicvoidgetString(String s, int left, int right){ while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) { --left; ++right; } int len = right - 1 - left; if (len > max) { max = len; ans = s.substring(++left, right); } }
public String longestPalindrome(String s){ if (s.length() == 0) return""; for (int i = 0; i < s.length(); ++i) { getString(s, i, i); getString(s, i, i + 1); } return ans; }
publicboolean(int x){ if (x < 0) returnfalse; int head = 1; // head *= 10; // } may overflow while (x / head >= 10) head *= 10;
// while (x >= 10) { // 1000021 while (x > 0) { int digit = x % 10; int first = x / head; if (digit != first) returnfalse; x %= head; x /= 10; head /= 100; } returntrue; }
publicbooleancheck(String s){ int begin = 0, end = s.length() - 1; while (begin <= end) { char c1 = s.charAt(begin), c2 = s.charAt(end); if (c1 != c2) returnfalse; begin++; end--; } returntrue; }
public String shortestPalindrome(String s){ if (s == null || s.length() <= 1) return s; String rev = new StringBuilder(s.substring(1)).reverse().toString(); int min = Integer.MAX_VALUE; String ans = ""; for (int i = rev.length(); i > 0; --i) { StringBuilder sb = new StringBuilder(s); String tmp = rev.substring(0, i); sb.insert(0, tmp); if (check(sb.toString()) && sb.length() < min) { min = sb.length(); ans = sb.toString(); } } return ans; }
近期评论