`
testforvln
  • 浏览: 18951 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论
  • superich2008: 1、去重可以用Set集合2、在排序后,相邻2个元素如果相同可以 ...
    4Sum

Anagrams

 
阅读更多
这题实在是没懂它的意思。。。囧啊
import java.util.HashSet;
public class Solution {
    public ArrayList<String> anagrams(String[] strs) {
        ArrayList<String> results = new ArrayList<String>();
        HashSet<String> anas = new HashSet<String>();
        HashMap<String, Integer> first = new HashMap<String, Integer>();
        HashSet<String> added = new HashSet<String>();
        for (int i = 0; i != strs.length; ++i){
            String temp = getSmallestAna(strs[i]);
            if (anas.contains(temp)){
                if (!added.contains(strs[first.get(temp)])){
                    results.add(strs[first.get(temp)]);
                    added.add(strs[first.get(temp)]);
                }
                results.add(strs[i]);
            } else {
                anas.add(temp);
                first.put(temp, i);
            }
        }
        return results;
    }
    
    public String getSmallestAna(String origin){
        char[] chars = origin.toCharArray();
        char head = 'z';
        int length = origin.length();
        HashSet<Integer> indexs = new HashSet<Integer>();
        for (int i = 0; i != length; ++i)
            if (chars[i] < head){
                head = chars[i];
                indexs.clear();
                indexs.add(i);
            } else if (chars[i] == head)
                    indexs.add(i);
        String small = origin;
        for (int index: indexs){
            String temp = origin.substring(index, length) + origin.substring(0, index);
            if (temp.compareTo(small) < 0)
                small = temp;
        }
        return small;
    }
}


额 结果只要看字符以及对应的个数相同就行了。。。直接排序嘛 还简单一些
import java.util.HashSet;
public class Solution {
    public ArrayList<String> anagrams(String[] strs) {
        ArrayList<String> results = new ArrayList<String>();
        HashSet<String> anas = new HashSet<String>();
        HashMap<String, Integer> first = new HashMap<String, Integer>();
        HashSet<String> added = new HashSet<String>();
        for (int i = 0; i != strs.length; ++i){
            String temp = getSmallestAna(strs[i]);
            if (anas.contains(temp)){
                if (!added.contains(strs[first.get(temp)])){
                    results.add(strs[first.get(temp)]);
                    added.add(strs[first.get(temp)]);
                }
                results.add(strs[i]);
            } else {
                anas.add(temp);
                first.put(temp, i);
            }
        }
        return results;
    }
    
    public String getSmallestAna(String origin){
        char[] chars = origin.toCharArray();
        Arrays.sort(chars);
        return new String(chars);
    }
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics