您的位置:首页 > 其它

(171)乱序字符串

2015-10-22 13:21 344 查看


中等 乱序字符串
查看运行结果 

21%

通过

给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中。

您在真实的面试中是否遇到过这个题? 

Yes

样例

对于字符串数组 ["lint","intl","inlt","code"]
返回 ["lint","inlt","intl"]

注意

所有的字符串都只包含小写字母
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class 乱序字符串 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] s ={"lint","intl","inlt","code"};
List<String> li = new ArrayList<String>();
li = anagrams(s);
System.out.println(li);

}

public static List<String> anagrams(String[] strs) {

Map<String,Integer> m = new HashMap<String,Integer>();

List<String> list = new ArrayList<String>();

m = putStringToMap(m,strs);

int len = strs.length;

for(int i=0;i<len;i++)
{
if(compareToRight(m,strs[i]))
{
list.add(strs[i]);
}
}

return list;
}

private static boolean compareToRight(Map<String, Integer> m, String string) {

char[] c = string.toCharArray();
Arrays.sort(c);
string = new String(c);
if(m.containsKey(string))
{
int num = m.get(string);
if(num>1)
{
return true;
}
}
return false;
}

private static Map<String, Integer> putStringToMap(Map<String, Integer> m, String[] strs) {

int len = strs.length;
for(int i=0;i<len;i++)
{
String newString = strs[i];
char[] str = newString.toCharArray();
Arrays.sort(str);
String ss = new String(str);

if(m.containsKey(ss))
{
m.remove(ss);
m.put(ss,3);
}
else {
m.put(ss, 1);
}
}
return m;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: