我想的是就跟连通块一样,一行有一个共同的标志,然后去检查每个字符串的每个字符是不是有一样的标识就行了。可不可以一个key对应一个List的value呢?有没有这样的数据结构呢map<key,list<value>>类似这种,我不知道所以我先尝试用一下别的标识
class Solution {
public String[] findWords(String[] words) {
Map<Character,Integer> map = new HashMap<>();
// map.put('q',0);map.put('w',0);map.put('e',0);map.put('r',0);map.put('t',0);map.put('y',0);map.put('u',0);map.put('i',0);map.put('o',0);map.put('p',0);
// map.put('a',1);map.put('s',1);map.put('d',1);map.put('f',1);map.put('g',1);map.put('h',1);map.put('j',1);map.put('k',1);map.put('l',1);
// map.put('z',2);map.put('x',2);map.put('c',2);map.put('v',2);map.put('b',2);map.put('n',2);map.put('m',2);
String[] cset ={"qwertyuiop","asdfghjkl","zxcvbnm"};
int l1 = cset.length;
for( int i = 0 ; i < l1 ; i ++ ){
// int l2 = cset[ i ].length();
for( char c : cset[ i ].toCharArray() )
map.put( c, i );
}
List<String> res = new LinkedList<>();
for( String ss : words ){
int now = map.get( ss.toLowerCase().charAt(0));
for( char c : ss.toLowerCase().toCharArray() ){
if( map.get( c ) != now ){
now = -1;
break;
}
}
if( now != -1 )res.add( ss );
}
return res.toArray(new String[0]);
}
}
想不明白,,为啥我的就wa了呢。。。