LeetCode热题100道-Day02

56 阅读1分钟

LeetCode热题100道-Day02

5. 最长回文子串

  • 可以采用中心扩散法进行截取最长回文,从i=>i这个范围截取,从i=>i+1这个范围截取
class Solution {
    public String longestPalindrome(String s) {
        
        if(s == null || s.length() == 0) return "";
​
        int l,r = 0;
        String res = "";
​
        for(int i = 0; i < s.length(); i ++){
            String s1 = palindrome(s,i,i);
            String s2 = palindrome(s,i,i+1);
            res = res.length() > s1.length() ? res : s1;
            res = res.length() > s2.length() ? res : s2;
        }
​
        return res;
​
    }
​
    public String palindrome(String s,int l,int r){
        if(s == null || s.length() == 0) return "";
        while(l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)){
            l--;
            r++;
        }
​
        return s.substring(l+1,r);
    }
}
func longestPalindrome(s string) string {
​
  if len(s) == 0 {
    return ""
  }
​
  res := ""
  // 从中间开始向两边扩散来判断回文串,对于最长回文子串
  for i := 0; i < len(s); i++ {
    // 以s[i]为中心的最长回文
    s1 := palindrome(s, i, i)
    // 以s[i] s[i+1]为中心的最长回文
    s2 := palindrome(s, i, i+1)
​
    if len(res) < len(s1) {
      res = s1
    }
​
    if len(res) < len(s2) {
      res = s2
    }
  }
  return res
}
​
func palindrome(s string, l, r int) string {
​
  if len(s) == 0 {
    return ""
  }
  // 防止索引越界
  for l >= 0 && r < len(s) && s[l] == s[r] {
    // 向两边展开
    l--
    r++
  }
  // 返回以 s[l] 和 s[r] 为中心的最长回文串
  return s[l+1 : r]
}

7. 整数反转

  • 利用数学的方式取余之后*10直到x为0
class Solution {
    public int reverse(int x) {
        if(x == 0) return 0;
        int rev = 0;
        while(x != 0){
            if(rev < Integer.MIN_VALUE/10 || rev > Integer.MAX_VALUE/10){
                return 0;
            }
            int digit = x % 10;
            x /= 10;
            rev = rev*10+digit;
        }
        return rev;
    }
}
func reverse(x int) (rev int) {
  for x != 0 {
    if rev < math.MinInt32/10 || rev > math.MaxInt32/10 {
      return 0
    }
    digit := x % 10
    x /= 10
    rev = rev*10 + digit
  }
  return
}

1758. 生成交替二进制字符串的最少操作数

  • 遍历字符串,c要么是1就是0,如果 1 != 0 或者 0 != 1 就累加一次
class Solution {
    public int minOperations(String s) {
        if(s == null || s.length() == 0) return 0;
        
        int cnt = 0;
​
        for(int i = 0; i < s.length(); i++){
            char c = s.charAt(i);
            if(i % 2 != (c - '0')){
                cnt ++;
            }
        }
        return Math.min(cnt,s.length() - cnt);
    }
​
}
func minOperations(s string)class Solution {
    public int minOperations(String s) {
        if(s == null || s.length() == 0) return 0;
        
        int cnt = 0;
​
        for(int i = 0; i < s.length(); i++){
            char c = s.charAt(i);
            if(i % 2 != (c - '0')){
                cnt ++;
            }
        }
        return Math.min(cnt,s.length() - cnt);
    }
​
} int {
  if len(s) == 0 {
    return 0
  }
  cnt := 0
  // 0 1 0 1
  // c要么是1就是0,如果 1 != 0 或者 0 != 1 就累加一次
  for i, c := range s {
    if i%2 != int(c-'0') {
      cnt++
    }
  }
  return min(cnt, len(s)-cnt)
}
​
func min(a, b int) int {
  if a > b {
    return b
  }
  return a
}