本文主要是介绍字符串的重新排列,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
字符串的重新排列
一、题目描述
- LeetCodeOJ链接: 字符串的重新排序
二、套入模板
class Solution {
public boolean checkInclusion(String s1, String s2) {
HashMap<Character,Integer> need=new HashMap<>();
HashMap<Character,Integer> window=new HashMap<>();
for(char ch:s1.toCharArray()){
need.put(ch,need.getOrDefault(ch,0)+1);
}
char chs[]=s2.toCharArray();
int left=0;
int right=0;
int valid=0;
while(right<s2.length()){
char c=chs[right];
right++;
if(need.containsKey(c)){
window.put(c,window.getOrDefault(c,0)+1);
if(need.get(c).equals(window.get(c)))
valid++;
}
while(right-left>=s1.length()){
if(valid==need.size())
return true;
char d=chs[left];
left++;
if(need.containsKey(d)){
if(need.get(d).equals(window.get(d))){
valid--;
}
window.put(d,window.get(d)-1);
}
}
}
return false;
}
}
- 解题思路
1、本题移动 left 缩⼩窗⼝的时机是窗⼝⼤⼩⼤于 t.size() 时,应为排列嘛,显然⻓度应该是⼀样的。
2、当发现 valid == need.size() 时,就说明窗⼝中就是⼀个合法的排列,所以⽴即返回 true。
这篇关于字符串的重新排列的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!