給定某一長度的字符串,請找出其中由相同字符連接而成的最長字符串,
并已"字母,長度"的形式返回。
比如"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★ 閱讀(1894)
評論(0) 編輯 收藏 所屬分類:
算法總結