笔试题 (HD)
题目描述:
输入一串字符串,输出字符串中长度最长的连续字母,如果有多个,就输出多个,以分号隔开,重复的不需要过滤
eg:
输入:aadsfsdfddddsfsd,输出:d
输入:abcdefg,输出:a;b;c;d;e;f;g
输入:aaaadsfsdfddddsfsaaaad,输出:a;d;a
public String retrArray(String str){
int dp[]=new int[str.length()];
if(str.length()!=0){
dp[0]=1;
}
for (int i = 1; i < str.length(); i++) {
if(str.charAt(i-1)==str.charAt(i)){
dp[i]=dp[i-1]+1;
}else{
dp[i]=1;
}
}
int temp=dp[0];
for (int i = 1; i < dp.length; i++) {
if(temp<dp[i]){
temp=dp[i];
}
}
int record[] =new int[dp.length];
Arrays.fill(record,-1);
int k=0;
for (int i = 0; i < dp.length; i++) {
if(temp==dp[i]){
record[k]=i;
k++;
}
}
String str1="";
for (int i = 0; i < record.length; i++) {
if(record[i]!=-1){
str1+=str.charAt(record[i])+",";
}
}
return str1.substring(0,str1.length()-1);
}
思路:采用动态规划来做的,通过与前一个字符进行比较若相等,则将记录的前一个状态+1,若不等则重新置位1并记录,最后通过遍历记录的状态返回最后的结果。
运行结果:
abcdefg