2018-11-30 字符串的排列

题目:

字符串的排列

解法:

只要在一个s1长度的固定大小的窗口内, 如果有其中的字符数量相等, 即认为第一个字符串s1的排列之一是第二个字符串s2的子串

public boolean checkInclusion(String s1, String s2) {
    if (s1 == null || s2 == null) {
        return false;
    }
    if (s1 == "") {
        return true;
    }
    if (s1.length() > s2.length()) {
        return false;
    }
    int[] s1CharCount = new int[26];
    int[] slidingWindow = new int[26];
    for (int i = 0; i < s1.length(); i++) {
        // 对应字符相加
        s1CharCount[s1.charAt(i) - 'a']++;
    }

    int s1Len = s1.length();
    // 窗口左边界, 包含
    int lo = 0;
    // 窗口右边界, 包含
    int hi = s1Len - 1;

    // 初始化窗口的字符个数, 暂时不包含hi
    for (int i = lo; i < hi; i++) {
        slidingWindow[s2.charAt(i) - 'a']++;
    }

    while (hi < s2.length()) {
        slidingWindow[s2.charAt(hi) - 'a']++;
        // 对比两个数组是否相等
        if (Arrays.equals(s1CharCount, slidingWindow)) {
            return true;
        } else {
            slidingWindow[s2.charAt(lo++) - 'a']--;
        }
        hi++;
    }
    return false;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 算法思想贪心思想双指针排序快速选择堆排序桶排序荷兰国旗问题二分查找搜索BFSDFSBacktracking分治动态...
    第六象限阅读 10,211评论 0 0
  • 前言 2. 实现 Singleton 3. 数组中重复的数字 4. 二维数组中的查找 5. 替换空格 6. 从尾到...
    Observer_____阅读 8,145评论 0 1
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 9,080评论 0 2
  • 北京时间19:40 我正坐在去往石家庄的动车上 开着空调 很热 真的很热 半小时前一家人把我送到火车站 直到半小时...
    Cutie_ll阅读 1,855评论 0 0
  • 起雾了。身边原本熟悉的风景变得一片模糊。 周赶着上班,低头猛走。周在一所远近闻名的学校工作。之所以出名,是因为学校...
    大妈不油腻阅读 1,621评论 3 0

友情链接更多精彩内容