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()+"}");
		}
	}
}

看来还是自己还不够秃啊,现在看起来还是差不多的

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值