interview summary one

1.一个字符串String=“adadfdfseffserfefsefseetsdg”,找出里面出现次数最多的字母和出现的次数。 经典的解答思路为:取出字符串的第一个字符(首字母),利用的字符串的 replace 方法将符合正则表达式(第一个字符)替代为空,此字母出现的次数为原始的字符串长度减去替代后的字符串长度。循环迭代找出长度最长的字母。

 

<script type="text/javascript">
var str ="adadfdfseffserfefsefseeffffftsdg"; //命名一个变量放置给出的字符串 
var maxLength = 0; //命名一个变量放置字母出现的最高次数并初始化为0 
var result = ''; //命名一个变量放置结果输入  

 

while( str){ //循环迭代开始,并判断字符串是否为空 
    oldStr = str; //将原始的字符串变量赋值给新变量 
    getStr = str.substr(0,1); //用字符串的substr的方法得到第一个字符(首字母) 
    eval("str = str.replace(/"+getStr+"/g,'')"); //详细如补充  

 

    if( oldStr.length-str.length > maxLength ) { //判断原始的字符串的长度减去替代后字符串长度是否大于之前出现的最大的字符串长度 
        maxLength = oldStr.length-str.length; //两字符串长度相减得到最大的字符串长度 
        result = getStr + "=" + maxLength //返回最大的字符串结果(字母、出现次数) 
    } 
}   
alert(result) //弹出结果  
</script>

 

补充: 

代码如下:

eval("str = str.replace(/"+getStr+"/g,'')");


可能很多人想这样写 str = str.replace(/getStr/g,”),可结果却是会出错的。为什么呢,在这句中正则表达式匹配的是 getStr 字符串,而不是 getStr 指向的首字母。通过 eval 方法可以避免(首先 getStr 得到指向的首字母,用字符串连接 “str = str.replace(/”+getStr+”/g,”)”,最后在 eval 中执行这段代码,即:先解释Javascript 代码,然后再执行它)。 

由于 eval 性能不好,容易出错,而且可读性不好。建议将 eval(”str = str.replace(/”+getStr+”/g,”)”) 改为: 
str = str.replace(new RegExp(getStr,"g"),"")

java code:

package com.string;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class StringSplitDemo {
 public static void main(String[] args) {
   String s="admiaai";
  //计算哪个字母出现最多次
  String[] a=s.split("");
  System.out.println(a.length);
  int tag=0;
  HashMap hm=new HashMap();
  int count=0;
  for (int i = 1; i < a.length; i++) {
   //System.out.print(a[i]+",");
   if(!hm.containsKey(a[i])){
    for (int j = 1; j < a.length; j++) {
     if(a[i].equals(a[j])){
      ++tag;
     }
    }
   //System.out.println(++count+"次数");
   //System.out.println(tag);
   //hm.containsKey(a[i]);
   hm.put(a[i], tag);
   tag=0;
   }
  }
  System.out.println();
  //输出hm内容
  //先获取map集合的所有[键]的Set集合,keySet();
  Set<String> keySet = hm.keySet();
  
  //有了Set集合,就可以获取迭代器
  Iterator<String> iterator = keySet.iterator();
  while(iterator.hasNext())
  {
   String keyString = iterator.next();
   //有了键就可以通过map集合的get方法获得对应的值
   Integer valueString = (Integer) hm.get(keyString);
   System.out.println(""+keyString+","+valueString); 
  }
 }
}

 

 

【题目】给你一个字符串,包含了空格等标点符号,要你计算出出现次数最多的字母和该字母出现的次数。
【code】:

private static void totalTimes(String str) {
char[] ch = str.toCharArray();
Map<Character, Integer> timesMap = new HashMap<Character, Integer>();

for (int i = 0; i < ch.length; i++) {
if ((ch[i] >= 65 && ch[i] <= 90) || (ch[i] >= 97 && ch[i] <= 122)) {
Integer freq = timesMap.get(ch[i]);
timesMap.put(ch[i], freq == null ? Integer.valueOf(1) : ++freq);
}
}

int charMaxIndex = Collections.max(timesMap.values());
int charMinIndex = Collections.min(timesMap.values());

Set<Character> maxSet = new HashSet<Character>();
Set<Character> minSet = new HashSet<Character>();

for(Map.Entry<Character, Integer> entry : timesMap.entrySet()){

if(entry.getValue().equals(charMaxIndex)){
maxSet.add(entry.getKey());
}

if(entry.getValue().equals(charMinIndex)){
minSet.add(entry.getKey());
}

}

System.out.println("出现最多的字母:" + maxSet);
System.out.println("出现次数:" + charMaxIndex);
System.out.println("出现最小的字母:" + minSet);
System.out.println("出现次数:" + charMinIndex);

}

 


当然,除了以上,如果不能利用到Java里的集合,那么就可能在数组上做文章了,如下:

String str =  "hello wolrd wlllkdsfhksadfls?sdfls sdf.pqyutgvAAAxzsdfs "  +  
               "lsdfj,ljsfd  ajfdsak sfksjdfisfsdkfj lsdfjsidf jsafdalsjfs sfskdfjs" ;  
       int [] strCounts =  new   int [ 255 ];  
       int  biggestCount =  0 ;  
       char  biggestCh =  0 ;  
       char  ch =  0 ;  
       int  currentCount =  0 ;  
       for  ( int  i = str.length() -  1 ; i >=  0 ; i--) {  
           ch = str.charAt(i);  
           currentCount = ++strCounts[ch];  
           if  (currentCount > biggestCount) {  
               biggestCount = currentCount;  
               biggestCh = ch;  
           }  
       }  
       System.out.println(biggestCh);  
       System.out.println(biggestCount); 

 

 2.hibernate是如何实现延迟加载的?

延迟加载是为了避免一些无所谓的性能开销提出来的,所谓延迟加载,就是当真正需要数据时,才执行数据加载工作。它节省了内存开销,提高了服务器的性能。hibernate2提供了实体对象和集合的延迟加载。hibernate3还提供了属性的延迟加载。http://blog.163.com/xi_zh_qi/blog/static/8501594200812695053939/

 

posted on 2013-06-07 17:51  xmmprincess  阅读(131)  评论(0)    收藏  举报

导航