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);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值