JAVA 使用TreeMap实现计算字符串中出现的字符索引
题目:使用TreeMap实现计算字符串中出现的字符索引(字符在串中的位置)。 例如输入“Hello World”,运行该程序将得到的结果为: { =[5], H=[0], W=[6], d=[10], e=[1], l=[2, 3, 9], o=[4, 7], r=[8]} 代码:
package text; import java.util.*; public class Student { static public void main(String[] args) { String ktu = "Hello World"; char stu[] = ktu.toCharArray(); char rtu[] = ktu.toCharArray(); char temp; int count=0; for(int i=0;i<11;i++) { for(int j=0;j<10-i;j++) { if(rtu[j]>rtu[j+1]) { temp = rtu[j]; rtu[j] = rtu[j+1]; rtu[j+1] = temp; } } } int ctu[] = new int[11]; List<Object> dist = new ArrayList<Object>(); Map<Object, Integer> map= new HashMap<Object, Integer>(); // 放置重复字符及其重复次数 for (Object item : rtu) { if (dist.contains(item)) { // 如果包含此字符则放入map map.put(item, map.get(item)+1); } else { dist.add(item); map.put(item, 0); } } for(Object ch:dist) { String gh = String.valueOf(ch); for(int i=0;i<stu.length;i++) { String fh = String.valueOf(stu[i]); if(fh.equals(gh) && ctu[i]==0) { List<String> list = new ArrayList<String>(); if(ctu[i] == 0) { if(count==0) { System.out.print("{"); } System.out.print(stu[i]+"="); list.add(String.valueOf(i)); } for(int j=i+1;j<stu.length;j++) { if(stu[i] == stu[j] && ctu[i] == 0) { ctu[j] = 1; list.add(String.valueOf(j)); } } if(ctu[i] == 0) { System.out.print(list); count++; if(count<dist.size()) { System.out.print(", "); } if(count == dist.size()) { System.out.println("}"); } } } } } } }
这个东西还是蛮难弄的在网上也找不到资源只能自己摸索,貌似花了我两个小时吧,觉得比较有意义,希望这个能帮到对于这个有困扰的你吧。如果有什么错误的地方,还望批评指正,当然有什么建议也可以提的啦,嘿嘿。
2019/12/25增: 这里附上python代码,简直了,差别太大了:
def solve(): stu = "Hello World" ctu = list(set(stu)) ctu.sort() ok = 0 print(ctu) for i in ctu: ok += 1 ktu = [] for j, p in zip(stu, range(len(stu))): if i == j: ktu.append(p) if ok == 1: print("{", end=) print("{0}={1}".format(i, ktu), end= ) if ok == len(ctu): print("}") solve() exit(0)
你没看错就这么点,我… 2019/12/28增: 简化版java:
package text; import java.util.*; public class Student { public static void main(String args[]) { Scanner sc = new Scanner(System.in); List<String> list=new ArrayList<String>(); String stu="Hello World"; char ctu[]=stu.toCharArray(); for(char i:ctu) { String ktu=String.valueOf(i); if(!list.contains(ktu)) { list.add(ktu); } } Collections.sort(list); for(int i=0;i<list.size();i++) { List<String> pta=new ArrayList<String>(); for(int j=0;j<ctu.length;j++) { if(String.valueOf(ctu[j]).equals(list.get(i))) { pta.add(String.valueOf(j)); } } if(i==0)System.out.print("{"+list.get(i)+"="+pta.toString()+", "); else if(i<list.size()-1)System.out.print(list.get(i)+"="+pta.toString()+", "); else System.out.println(list.get(i)+"="+pta.toString()+"}"); } } }
看来还是自己还不够秃啊,现在看起来还是差不多的
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
21天学习挑战赛--执行时长