中级农民
- 积分
- 136
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-1-21
- 最后登录
- 1970-1-1
|
google onsite 3. 扫一遍string 用一个map存index。
能快一些。但总觉得是不是哪里还是麻烦了?有更好的方法么
- public String solve2(String str, String[] words){
- Map<Character, LinkedList<Integer>> map = process(str);
- int max = 0;
- String res = "";
- for(String ss: words){
- if(ss.length() > max){
- Map<Character, LinkedList<Integer>> tmp = copyMap(map);
- int cur = 0;
- boolean flag = true;
- for(char c: ss.toCharArray()){
- if(!tmp.containsKey(c) || tmp.get(c).size()==0){
- flag = false;
- break;
- }
- int p = tmp.get(c).pollFirst();
- if( p < cur ){
- flag = false;
- break;
- }
- cur = p;
- }
- if(flag){
- max = ss.length();
- res = ss;
- }
- }
- }
- return res;
- }
- private Map<Character, LinkedList<Integer>> copyMap(Map<Character, LinkedList<Integer>> map){
- Map<Character, LinkedList<Integer>> tmp = new HashMap<>();
- for(Map.Entry<Character, LinkedList<Integer>> me: map.entrySet()){
- tmp.put(me.getKey(), new LinkedList<>(me.getValue()));
- }
- return tmp;
- }
- private Map<Character, LinkedList<Integer>> process(String str){
- Map<Character, LinkedList<Integer>> map = new HashMap<>();
- char[] chars = str.toCharArray();
- for(int i = 0; i<chars.length; i++){
- map.computeIfAbsent(chars[i], k->new LinkedList<Integer>()).add(i);
- }
- return map;
- }
复制代码
String[] strs1 = {"a","aae","bc","adbe","abe","bca","aaaa"};
Solution5 s = new Solution5();
String res = s.solve2("abcde", strs1); -----> abe
补充内容 (2017-1-6 09:44):
尤其用林kedlist存相同字母的每个index 和copymap哪里。不知道有没有什么更好的方法?
|
|