中级农民
- 积分
- 121
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2015-12-3
- 最后登录
- 1970-1-1
|
po个代码,一个检查顺序,一个自定义顺序排序string array
- import java.util.*;
- public class Solution {
- public static void main(String[] args) {
- System.out.println("?");
- Solution s = new Solution();
- s.unitTest_validOrder();
- return;
- }
- private void unitTest_validOrder() {
- String order = "abcde";
- String[][] tests = {
- {"abcde", "bcd", "cde", "bbb", "bab"},
- {"a", "b", "cde", "dcs", "e"}
- };
- for (String[] s : tests) {
- String res = String.valueOf(validOrder(s, order));
- System.out.println(res);
- }
- String[] test1 = {"abcde", "bcd", "cde", "bbb", "bab"};
- String[] res = sortStringArray(test1, order);
- for (String s : res) {
- System.out.println(s);
- }
- }
- public boolean validOrder(String[] words, String order) {
- HashMap<Character, Integer> map = new HashMap<>();
- for (int i = 0; i < order.length(); i++) {
- map.put(order.charAt(i), i);
- }
- for (int i = 1; i < words.length; i++) {
- String pre = words[i-1];
- String cur = words[i];
- int l = Math.min(pre.length(), cur.length());
- for (int j = 0; j < l; j++) {
- char cpre = pre.charAt(j);
- char ccur = cur.charAt(j);
- if (cpre != ccur) {
- if (map.get(cpre) > map.get(ccur))
- return false;
- else {
- break;
- }
- }
- }
- }
- return true;
- }
- public String[] sortStringArray(String[] words, String order) {
- HashMap<Character, Integer> map = new HashMap<>();
- for (int i = 0; i < order.length(); i++) {
- map.put(order.charAt(i), i);
- }
- List<String> list = bucketSort(Arrays.asList(words), map, order, 0);
- String[] res = new String[list.size()];
- for (int i = 0; i < list.size(); i++) {
- res[i] = list.get(i);
- }
- return res;
- }
- public List<String> bucketSort(List<String> list, HashMap<Character, Integer> orderMap, String order, int index) {
- HashMap<Character, List<String>> bucket = new HashMap<>();
- for (char c : orderMap.keySet()) {
- bucket.put(c, new ArrayList<>());
- }
- for (String s : list) {
- bucket.get(s.charAt(index)).add(s);
- }
- List<String> res = new ArrayList<>();
- for (char c : order.toCharArray()) {
- if (bucket.get(c).size() == 1) {
- res.add(bucket.get(c).get(0));
- } else if (bucket.get(c).size() > 1) {
- res.addAll(bucketSort(bucket.get(c), orderMap, order, index + 1));
- }
- }
- return res;
- }
- }
复制代码
补充内容 (2018-11-11 21:20):
alien dict 变种 |
|