题目:使用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()+"}");
}
}
}
看来还是自己还不够秃啊,现在看起来还是差不多的