题目链接

字符串的排列

题目描述

image.png

解题思路

方法一:滑动窗口

该题的核心思想就在于需要理解一个点:对于两个字符串s1 和 s2,互为排列串的充要条件就是:两个字符串里面包含的所有字符对应的出现次数完全相同

实现代码如下:

  1. class Solution {
  2. public boolean checkInclusion(String s1, String s2) {
  3. int n = s1.length(), m = s2.length();
  4. if (n > m) {
  5. return false;
  6. }
  7. int[] cnt1 = new int[26];
  8. int[] cnt2 = new int[26];
  9. for (int i = 0; i < n; ++i) {
  10. ++cnt1[s1.charAt(i) - 'a'];
  11. ++cnt2[s2.charAt(i) - 'a'];
  12. }
  13. if (Arrays.equals(cnt1, cnt2)) {
  14. return true;
  15. }
  16. for (int i = n; i < m; ++i) {
  17. ++cnt2[s2.charAt(i) - 'a'];
  18. --cnt2[s2.charAt(i - n) - 'a'];
  19. if (Arrays.equals(cnt1, cnt2)) {
  20. return true;
  21. }
  22. }
  23. return false;
  24. }
  25. }