014. 字符串中的变位词
class Solution {
Map m1 =new HashMap<>();
Map m2 =new HashMap<>();
public boolean check(char c)
{
if(m1.containsKey(c)&&m1.get(c).equals(m2.get(c)))
return true;
return false;
}
public boolean checkInclusion(String s1, String s2) {
for(char c : s1.toCharArray())
{
m1.put(c,m1.getOrDefault(c,0)+1);
}
//判断m1与m2有多少种字符是相等的 最多26
for(int i=0,j=0,cnt=0;i
015. 字符串中的所有变位词
class Solution {
Map mp=new HashMap<>();
Map ms=new HashMap<>();
boolean check(char c)
{
if(mp.containsKey(c)&&mp.get(c).equals(ms.get(c)))
return true;
return false;
}
public List findAnagrams(String s, String p) {
List ans =new ArrayList();
char [] cs= s.toCharArray();
char [] cp= p.toCharArray();
for(char c : cp)
{
mp.put(c,mp.getOrDefault(c,0)+1);
// System.out.println(mp.size());
}
int n=s.length(),m=p.length();
for(int i=0,j=0,cnt=0;im)
{
if(check(cs[j]))cnt--;
ms.put(cs[j],ms.get(cs[j])-1);
if(check(cs[j]))cnt++;
j++;
}
//System.out.println(cnt);
//System.out.println(mp.size());
if(cnt==mp.size())ans.add(j);
}
return ans;
}
}
016. 不含重复字符的最长子字符串
双指针
class Solution {
public int lengthOfLongestSubstring(String s) {
Map memo =new HashMap<>();
int ans=0;
char [] cs=s.toCharArray();
for(int i=0,j=0;i
017. 含有所有字符的最短字符串
class Solution {
Maphs=new HashMap<>();
Mapht=new HashMap<>();
public String minWindow(String s, String t) {
char []cs= s.toCharArray();
char []ct= t.toCharArray();
String res="";
//滑动窗口
int cnt=0;
for(char c: ct)ht.put(c,ht.getOrDefault(c,0)+1);
for(int i=0,j=0;iht.getOrDefault(cs[j],0))
{//当s[j]字符在hs中比ht多时 左指针应该滑动
hs.put(cs[j],hs.get(cs[j])-1);
j++;
}
if(cnt==t.length())
{
if(res.isEmpty()||res.length()>i-j+1)res=s.substring(j,i+1);
}
}
return res;
}
}
018. 有效的回文
class Solution {
public boolean isPalindrome(String s) {
int n=s.length();
char []cs=new char [n];
int j=0;
for(int i=0;i='a'&&c<='z'))cs[j++]=c;
else if((c>='A'&&c<='Z'))cs[j++]=(char)(c+32);
else if(c>='0'&&c<='9')cs[j++]=c;//数字
}
boolean flag=true;
for(int i=0;i
019. 最多删除一个字符得到回文
找到两边第一处不同 跳过左边的 或右边的 再继续做 判断两次
class Solution {
public boolean validPalindrome(String s) {
int i=0,j=s.length()-1;
while(i=j)return true;
boolean flag=false;
int I=i,J=j;
i++;
while(i=j)return true;
i=I;j=J;
j--;
while(i=j)return true;
return false;
}
}
020. 回文子字符串的个数
class Solution {
public int countSubstrings(String s) {
//中心枚举
int n=s.length();
int res=0;
for(int i=0;i=0&&k=0&&k