笔试题 (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(tempdp[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
|