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

leetcode刷题——字符串的排列(Java)

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

leetcode刷题——字符串的排列(Java)

1.题目

2.条件与思路

统计s1各个字符的数量保存至cnt1[26],利用两个指针,两个指针中间相差s1的长度,统计指针之间的字符个数保存至cnt2,分别对于比较下标相同的值是否相同,如果全部相同表示可以返回true,否则同时移动两个指针一步,循环如此。

3.解题过程
class Solution {
    public boolean checkInclusion(String s1, String s2) {
        int len1 = s1.length();
        int len2 = s2.length();
        int i = 0;
        int j = len1;
        int[] cnt1 = new int[26];
        int[] cnt2 = new int[26];
        boolean flag = true;
        //统计s1的字符的个数
        for(int k=0;k 

class Solution {
    public boolean checkInclusion(String s1, String s2) {
        int len1 = s1.length();
        int len2 = s2.length();
        int i = 0;
        int j = len1-1;
        int[] cnt1 = new int[26];
        int[] cnt2 = new int[26];
        //统计s1的字符的个数
        for(int k=0;k 


第一次优化
分析:不需要在最后最后对cnt2进行循环清零,只需要在最开始重新定义该数组。

class Solution {
    public boolean checkInclusion(String s1, String s2) {
        int len1 = s1.length();
        int len2 = s2.length();
        int i = 0;
        int j = len1-1;
        int[] cnt1 = new int[26];
        //统计s1的字符的个数
        for(int k=0;k 


第二次优化
分析:每次都需要重新统计s2子串的字符数目,其实只需要在移动窗口时,将前窗口的cnt2[0]=0,重新统计cnt2[len2-1]。

class Solution {
    public boolean checkInclusion(String s1, String s2) {
        int len1 = s1.length();
        int len2 = s2.length();
        int i = 0;
        int j = len1-1;
        int[] cnt1 = new int[26];
        int[] cnt2 = new int[26];
        if(len1>len2) return false;
        //统计s1的字符的个数
        for(int k=0;k 

4.官方题解

class Solution {
    public boolean checkInclusion(String s1, String s2) {
        int n = s1.length(), m = s2.length();
        if (n > m) {
            return false;
        }
        int[] cnt1 = new int[26];
        int[] cnt2 = new int[26];
        for (int i = 0; i < n; ++i) {
            ++cnt1[s1.charAt(i) - 'a'];
            ++cnt2[s2.charAt(i) - 'a'];
        }
        if (Arrays.equals(cnt1, cnt2)) {
            return true;
        }
        for (int i = n; i < m; ++i) {
            ++cnt2[s2.charAt(i) - 'a'];
            --cnt2[s2.charAt(i - n) - 'a'];
            if (Arrays.equals(cnt1, cnt2)) {
                return true;
            }
        }
        return false;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/719679.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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