给定某一长度的字符串,请找出其中由相同字符连接而成的最长字符串,
并已"字母,长度"的形式返回。
比如"axxxbbbbxxxxxdd"其中由相同字符连接而成的最长字符串为xxxxx,则返回"x,5".
如果出现由不同字符构成的长度相同的字符串,则返回先出现的。
比如"aaabbbcc",返回"a,3".
包名:无
类名:SequenceFinder
方法签名:public String find(String message)
其中给定的message仅由字符'a'-'z'构成,message长度为1-40
class StringProcessing
{
static String getSubEqualString(String sourceString)
{
int stringLength=sourceString.length();//取得字符串的长度。
//从最长的子串(长度为stringlength的子串)开始检查,再检查第二长的子串
//(长度为stringlength-1的子串),依次检查到长度为2的子串。
for(int i=1;i<stringLength;i++)
{
TESTNEXT:for(int j=1;j<=i;j++)//遍历检查所有长度为(stringLength-i+1)的子串,
{
int subStart=j-1,subEnd=stringLength-i+1+subStart;//计算将进行检查的子串的起始位置和结束位置。
String tempString=sourceString.substring(subStart,subEnd);//取得将要检查的子串。
for(int k=0;k<tempString.length()-1;k++)
{
//若相邻的两个字符不相等,则不符合要求,立即结束对此子串的检查。
if(tempString.charAt(k)!=tempString.charAt(k+1)){continue TESTNEXT;}
}
return tempString;//若子串的所有字符都相同,则此子串就是我们要找的最长相同子串。
}
}
return sourceString.substring(0,1);//如果没有长度为2的子串,则第一个字符就是最长子串了。
}
}
public class tryequalstring
{
public static void main(String[] args)
{
System.out.println("aaabbbbbbcccddd"+":"+StringProcessing.getSubEqualString("aaabbbbbbcccddd"));
System.out.println("aaabbbcccdddeee"+":"+StringProcessing.getSubEqualString("aaabbbcccdddeee"));
System.out.println("abcdefghijklmno"+":"+StringProcessing.getSubEqualString("abcdefghijklmno"));
System.out.println("bbbbbbbbbbbbbbb"+":"+StringProcessing.getSubEqualString("bbbbbbbbbbbbbbb"));
}
}
//运行结果如下:
E:\java\ProgramJava\blog\io>javac tryequalstring.java
E:\java\ProgramJava\blog\io>java tryequalstring
aaabbbbbbcccddd:bbbbbb
aaabbbcccdddeee:aaa
abcdefghijklmno:a
bbbbbbbbbbbbbbb:bbbbbbbbbbbbbbb
posted on 2006-02-19 16:00
★yesjoy★ 阅读(1882)
评论(0) 编辑 收藏 所属分类:
算法总结