leetCode系列(一):计数

计数型

在那种要求自己记录下相同数字的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;
    }
点赞