栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【剑指offer2】 chap3 字符串

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【剑指offer2】 chap3 字符串

三、字符串 1、基础知识
  • Character

    • Java Character 类 | 菜鸟教程

Character.isLetterOrDigit(ch1)
Character.toLowerCase(ch1)
  • String

charAt

cmpareTo

equals

indexOf

lastIndexOf

length

split

substring

toLowerCase

toUpperCase

  • Java StringBuffer 和 StringBuilder 类

        Java StringBuffer 和 StringBuilder 类 | 菜鸟教程

StringBuffer str; 
str.toString(); 
str.append(char ch);

2、基本题型 (1)滑动窗口(同向双指针)-变位词
  • 滑动窗口+哈希表【小写字母26个,ASCII码256个,可以用数组记录】

    • 剑指 Offer II 014. 字符串中的变位词

    • 剑指 Offer II 015. 字符串中的所有变位词

    • 剑指 Offer II 016. 不含重复字符的最长子字符串

    • 剑指 Offer II 017. 含有所有字符的最短字符串

(2)回文字符串(反向双指针))
  • 剑指 Offer II 018. 有效的回文

  • 剑指 Offer II 019. 最多删除一个字符得到回文

public boolean validPalindrome(String s) {
    int i = 0, j = s.length() - 1;
    while (i < j && s.charAt(i) == s.charAt(j)) {
        i++;
        j--;
    }
    return i == s.length() / 2 + 1 || isPalindrome(s,i,j-1) || isPalindrome(s,i+1,j);
}

private static boolean isPalindrome(String s, int start, int end) {
    while (start < end) {
        if (s.charAt(start) != s.charAt(end)) {
            return false;
        }
        start++;
        end--;
    }
    return true;
}
  • 剑指 Offer II 020. 回文子字符串的个数

    • 双指针

    • 马拉车算法

public int countSubstrings(String s) {
    int count = 0;
    for (int i = 0; i < s.length(); i++) {
        count += countPalindrome(s, i, i);
        count += countPalindrome(s, i, i + 1);
    }
    return count;
}

private int countPalindrome(String s, int start, int end) {
    int count = 0;
    int i = start, j = end;
    while (i >= 0 && j < s.length() && s.charAt(i) == s.charAt(j)) {
        count++;
        i--;
        j++;
    }
    return count;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/852272.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号