帮同学笔试美团时遇到的一个题:输入任意的子串,找不所有没有相同元素的子串个数,最后只需要输出个数就行,代码如下(结果忘记了,最后结果可能有偏差,但是思路如下):首先先找出所有子串,把他们放在数组中,之后一次判断每一个是否有重复元素并记录个数。
import java.util.Scanner;
import java.util.*;
public class panduanzifuzichuangeshu {
public static void main(String args[]){
ArrayList<String> arr=new ArrayList<>();
Scanner sc = new Scanner(System.in);
String a = sc.next();
arr=subs(a);
int number=0;
for (int i = 0; i < arr.size() ; i++) {
if(checkDifferent(arr.get(i))){
number++;
}
}
System.out.println(number+2);
}
//所有的子串
public static ArrayList<String> subs(String str){
//int num = 0;
ArrayList<String> arr=new ArrayList<>();
String str2="";
for (int i = 0; i < str.length(); i++) {
str2="";
for (int j = i; j < str.length() ; j++) {
str2+=str.charAt(j);
arr.add(str2);
}
}
return arr;
}
//判断是否有重复的子串
public static boolean checkDifferent(String iniString) {
// write code here
if(iniString == null || iniString.length() < 2)
return true;
char a[] = iniString.toCharArray();
for(int i = 0; i < a.length ;i++)
{
for(int j = i+1; j < a.length ;j++)
if(a[i] == a[j])
return false;
}
return true;
}
}
在这里我只输出了最后的个数,大家可以参考,根据实际修改。