字符串的完美度总结

今天把字符串的完美度搞定了,啊,期间遇到很多问题,现分享一下:

 

       我做字符串完美度的的思路分为好几个方案,不过目前只有一个实现了,现在把这个思路贴出来

        总的思路:

                  先将字符串进行拆分为一个字符数组,然后对每个字符出现的次数进行统计,然后按照次数的多少从26开始逐步的进行

         赋值,接下来就可以进行计算完美值了。

                     把代码贴出来:

  

public static int perfect(String s){
		char[]array=s.toCharArray();//用于获取每个字符
  		int maxValue=26;//字符中值最大时的情况
		int perfectSum=0;//保存完美值

		System.out.println("元素的个数为:"+array.length);
		//简历三个list集合一个保存第一次遇到的字符,一个保存期对应的值,一个用于保存期出现的次数,这三个list集合值是想对应的
		List<Character> listChar=new ArrayList<Character>();
		List<Integer> listValue=new ArrayList<Integer>();
		List<Integer> listCount=new ArrayList<Integer>();
		boolean flage=false;
		//先将每个字符的出现次数保存,然后根据次数进行分配值,然后再循环所有字符进行计算完美值
		for(int i=0;i<array.length;i++){
			for(int f=0;f<listChar.size();f++){
				Character yizhi=listChar.get(f);
				if(yizhi.charValue()==Character.toLowerCase(array[i])){
				//	System.out.println("值有相同的为:"+array[i]);
					flage=true;
					listCount.set(f,new Integer(listCount.get(f).intValue()+1));
					break;
				}
				else
					flage=false;
			}
			if(!flage){
			    int value=1;
				char change=Character.toLowerCase(array[i]);
				listChar.add(new Character(change));
				listCount.add(new Integer(value));
			}
		}
		//对相应的listValue赋初值
		for(int q=0;q<listChar.size();q++)
			listValue.add(new Integer(0));
			
		int max=0;//保存出现次数最多的值
		int maxId=0;//保存出现次数最多值得Id
		
                  //进行对listValue进行赋值(是相应的字符(listChar)对应的值,根据listCount中的值由大到小进行分配)
		for(int r=0;r<listCount.size();r++){
				for(int t=0;t<listCount.size();t++){
					if(((max<=listCount.get(t).intValue())&&((listValue.get(t))==0))||((max<=listCount.get(t).intValue())&&r==0)){
						maxId=t;
						max=listCount.get(maxId).intValue();
					}
				}
			listValue.set(maxId,maxValue--);	
			max=0;
			maxId=0;
		}
	
	
		//进行计算perfect值
		for(int p=0;p<listChar.size();p++){
			perfectSum=perfectSum+(listCount.get(p).intValue())*(listValue.get(p).intValue());
		}
		return perfectSum;
	}
      

            思想总结:

                       1.对于每个问题的解决必须有一个清晰的解决方案,然后按方案进行编程

                       2.对于调试程序,一定要先进行静态调试,自己先分析,这样会使自己发现方案中不足

             java知识总结:

                       1.要学会看jdk的文档,当然得有一定的英文基础(我的就不是很好)

                       2.list集合其类型中必须是引用,不能是基本类型       

                   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值