题目

给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例1:输入: s1 = "ab" s2 = "eidbaooo"
输出: True
解释: s2 包含 s1 的排列之一 ("ba").示例2:输入: s1= "ab" s2 = "eidboaoo"
输出: False注意:输入的字符串只包含小写字母
两个字符串的长度都在 [1, 10,000] 之间

解决方法

    //思路/*** 首先如果是走求出所有的排列组合之后   再去进行匹配* 时间复杂度很高** 我们可以用一个26长度的数组  记录s1 和 s2 匹配的个数 count* 比如 arr['a']  如果两个字符串都有  那么 count ++* 如果count 值为26 说明两个字符串所有的字符个数都是一样的* 表示找到了字符串  否则就是没有找到** 首先遍历s1 个字符串  找到s1 和 s2 前k(k 为s1的长度)个的匹配度*/
class Solution {public boolean checkInclusion(String s1, String s2) {if (s1.length() > s2.length())return false;int[] s1map = new int[26];int[] s2map = new int[26];for (int i = 0; i < s1.length(); i++) {s1map[s1.charAt(i) - 'a']++;s2map[s2.charAt(i) - 'a']++;}int count = 0;for (int i = 0; i < 26; i++)if (s1map[i] == s2map[i])count++;for (int i = 0; i < s2.length() - s1.length(); i++) {int r = s2.charAt(i + s1.length()) - 'a', l = s2.charAt(i) - 'a';if (count == 26)return true;s2map[r]++;if (s2map[r] == s1map[r])count++;else if (s2map[r] == s1map[r] + 1)count--;s2map[l]--;if (s2map[l] == s1map[l])count++;else if (s2map[l] == s1map[l] - 1)count--;}return count == 26;}
}

算法----------字符串的排列(Java版本)相关推荐

  1. 算法----------字符串相乘(Java 版本)

    题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式.示例 1:输入: num1 = "2", nu ...

  2. 数据结构与算法--字符串的排列组合问题

    字符串的全排列 题目:输入一个字符串,打印出改字符串中所有字符的所有排列.例如输入字符串abc,那么打印出由a,b,c字符组成的所有字符串:abc,acb,bac,bca,cab,cba 如何求解全排 ...

  3. Google的S2算法原理以及使用Java版本--部分参考自《高效的多维空间点索引算法》

    文章目录 相关资料 1.S2算法是什么? 2.为什么要使用S2算法? 3.S2的原理是什么? 1)球面坐标变换 2)球面坐标转平面坐标(降维) remark: 3)球面矩形投影修正 4)点与坐标轴点相 ...

  4. 剑指offer(二十七)-字符串的排列(Java版)

    描述 输入一个字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组.例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca, ...

  5. 算法图解之快速排序(JAVA版本)

    阅读这篇文章就证明你已经开始踏上了算法的修仙之路,接下来我会两天一更,介绍图解算法里面的算法的实现, 适合Java程序员阅读. 文章目录 前言 一.什么是分治思想? 1.核心思想 2.案例展示 二.快 ...

  6. 算法-----------接雨水(Java版本)

    题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 思路及解决方法 static class Solution {public int trap( ...

  7. 算法---------简化路径(Java版本)

    题目 以 Unix 风格给出一个文件的绝对路径,你需要简化它.或者换句话说,将其转换为规范路径.在 Unix 风格的文件系统中,一个点(.)表示当前目录本身:此外,两个点 (..) 表示将目录切换到上 ...

  8. 算法--------最大正方形(Java版本)

    题目 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积.示例:输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0输出: 4 解决方 ...

  9. java字符串字符排列组合_如何在Java中查找字符串的所有排列

    java字符串字符排列组合 In this tutorial, we will learn how to find the permutation of a String in a Java Prog ...

最新文章

  1. 获取Java系统相关信息
  2. 关于中台,你可能不知道的那些事
  3. centos 定时删除文件_CentOS自动删除n天前日志命令
  4. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 加载 dex 文件 | 使用反射获取方法创建本应用的 dexElements | 各版本创建 dex 数组源码对比 )
  5. 使用docker commit将修改后的容器保存为镜像及其使用注意事项
  6. (转)Linux环境变量的设置和查看方法
  7. 获取Spring的ApplicationContext的几种方式
  8. Bash脚本教程之变量
  9. ROS安装过程和配置过程(可能出现的问题及解决方法)
  10. 利用 GitHub Actions 在 GitHub 上进行加密挖矿?
  11. 为什么今日头条、网易新闻都突然被强制下架了?
  12. poj 1328 贪心+qsort
  13. Knockout自定义绑定my97datepicker
  14. 嵌入式Linux必读经典书籍
  15. php laypage 开发demo,laypage+laytpl示例
  16. 什么是鱼骨分析法(N Why)?
  17. ios 操作通讯录联系人
  18. 将think-installer类库“v1.0.0“更新到“v2.0.0“
  19. 区块链的未来发展前景
  20. 阿里云视觉智能API,核心技术一站共享!

热门文章

  1. python字典键值可以是元组吗_python元组与字典
  2. 教师招聘要求计算机证,长沙市直教师招聘考试没有计算机证能考么?
  3. c语言输入身高计算标准体重_女人身高165cm标准体重是多少?
  4. 20.Android studio提示Cmake Error executing external native build for cmake...
  5. c++ 包络谱分析代码_基于特征分析谱估计算法(Capon, MUSIC, ESPRIT)的C++实现
  6. 纪念逝去的头发--一次debug经历
  7. nginx反向代理、负载均衡、动态请求
  8. 浅谈RAID写惩罚(Write Penalty)与IOPS计算
  9. (三)Sass和Compass--制作精灵图片
  10. 企业运维之域控篇(十)--SERVER 2003 迁移到 SERVER 2008 (异机)