计数型
在那种要求自己记录下相同数字的count的问题的时候,之前总喜欢用一个value和count来遍历,当value改变的时候进行存值。但是会出现很多问题,比如:
- 当数据长度为0时只能执行一次,并且没有办法根据下一个值与现在的值是否相等来进行处理。
- 当数据到达最后一个时总不太好处理
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length()) return false;
if(s.length()==0 && t.length()==0) return true;
int len=s.length();
if(len==1){
return s.equals(t);
}
int[] valCount=new int[len];
int[] values=new int[len];
int raw=0;
char[] sChar=s.toCharArray();
char[] tChar=t.toCharArray();
char value=sChar[0];
int count=1;
for(int i=1;i<len;i++){
if(sChar[i]==value) count++;
else{
values[raw]=value;
valCount[raw++]=count;
value=sChar[i];
count=1;
}
}
for(int i=0;i<raw;i++){
int countfor=0;
for(int j=0;j<len;j++){
if(values[i]==tChar[j]){
countfor++;
}
}
if(valCount[raw]!=countfor) return false;
}
return true;
}
现有方法改进方法:
待发现
新方法
把value的值作为数组的index,把count作为数组的value,这样的话就可以直接对count进行加减,并且不用考虑上诉方法的缺点
代码如下,参考leetcode valid anagram
public boolean isAnagram(String s, String t) {
int[] count=new int[26];
for(int i = 0 ; i < 26 ; i++) {
count[i] = 0;
}
char[] sch=s.toCharArray();
char[] tch=t.toCharArray();
for(int i = 0; i < s.length(); i ++)
count[sch[i]-'a'] ++;
for(int i = 0; i < t.length(); i ++)
count[tch[i]-'a'] --;
for(int i = 0; i < 26; i ++)
if(count[i] != 0)
return false;
return true;
}