东莞网站设计如何,网站空白页黑链,最好的网络推广方式,电脑app怎么制作一开始想用HashMap#xff0c;把每个字符放进去#xff0c;然后统计出现的次数。 使用LinkedHashMap的话#xff0c;键值对的顺序都是不会变的。 LinkedHashMapCharacter,Integer map new LinkedHashMap();map.put(i,1111);map.put(j,2222);map.put(k,3333…一开始想用HashMap把每个字符放进去然后统计出现的次数。 使用LinkedHashMap的话键值对的顺序都是不会变的。 LinkedHashMapCharacter,Integer map new LinkedHashMap();map.put(i,1111);map.put(j,2222);map.put(k,3333);map.put(l,4444);//LinkedHashMap的values也是按key的顺序吗CollectionInteger values map.values();IteratorInteger iterator values.iterator();while(iterator.hasNext()){System.out.println(iterator.next());} 输出的值是1111222233334444 所以按照题目只要判断出第一个出现次数为1的字符即可。 但是无法找到正确的下标。 比如aaabbbbcaaad。 怎么知道c的下标呢 很难。 最好的办法就是自定义一个数据结构Map里面存这个结构 public static class Node{//值public char val;//第一次出现的下标public int index;//出现的次数public int count;public Node(char val,int index,int count){this.val val;this.index index;this.count count;}} 这样就能按照出场顺序记录每个字符了。相对位置是绝对正确的 还能获取他们的个数。以及首次出现的位置。 public int firstUniqChar(String s) {//空的就是找不到if(snull||s.length()0){return -1;}LinkedHashMapCharacter,Node map new LinkedHashMap();for(int i0,lens.length();ilen;i){Node temp map.get(s.charAt(i));if(tempnull){map.put(s.charAt(i),new Node(s.charAt(i),i,1));}else {//这两个引用指向的是同一个地方所以直接在这就好了temp.count;}}//结果也是按顺序的找到最先出现那个即可CollectionNode values map.values();IteratorNode iterator values.iterator();Node result null;while(iterator.hasNext()){result iterator.next();if(result.count1)break;}//如果最后是次数1的就返回如果最后还没有次数1的就是找不到if(result.count1){return result.index;}else {return -1;}} 转载于:https://www.cnblogs.com/weizhibin1996/p/9762278.html