上次面试,碰到如题目的笔试题,有点简单。既是经历,就分享给大家吧。
这种题目,在不考虑性能和时间复杂度的情况下,可以使用双层循环搞定它,如下:
public class FindCharRepeat{
public static void main(String[] args){
String str = "agsvshjsbhgg";
for(int i = 0; i < length(); i++){
char c1 = str.charAt(i);
//method 1
for(int j = i+1; j < str.length(); j++){
char c2 = str.charAt(j);
if(c1 == c2){
System.out.println("The repeat char is " + c1 + ";");
}
}
}
}
}
开始也说了,这种双循环的代码,执行效率是比较耗时的。其实我们可以使用String中的lastIndexOf()方法,通过从最后一个字符的索引“length()-1”来规避掉内层循环。下面我们来搞一下:
//method 2
if(str.lastIndexOf(c1) != i){ //a char has different positions
System.out.println("The repeat char is " + c1 +";");
}
其实代码还可以继续优化,这里就给你们思考思考吧。