Я пытаюсь найти самые длинные повторяющиеся подпоследовательности смежных символов из строки.Найти длину самой длинной непрерывной подпоследовательности того же характер
public int longestRep(String str) {
}
При вызове метода с
longestRep("ccbbbaaaaddaa"); //Should return 4
код, который я использовал до сих пор есть;
public static int longestRep(String str)
{
int currLen = 1; // Current length of contiguous chars being held in str
char currLet = ' '; // Current Letter *NOT NEEDED FOR CODINGBAT
char maxLet = ' '; // Maximum length letter *NOT NEEDED FOR CODINGBAT
int maxLen = 0; // Maximum length of contiguous chars being held in str
//int maxCount = 0; // Highest count of contiguous chars being held in str
int currPos = 0; // Track where in str we are at
int strLen = str.length(); // Length of str;
for(currPos = 0; currPos < strLen -1 ; currPos++)
{
currLet = str.charAt(currPos);
//System.out.println("Curr char: "+currLet+" Next Char: "+str.charAt(currPos+1));
if(currLet == str.charAt(currPos+1))
{
currLen++;
}
if(currLen > maxLen)
{
maxLen = currLen;
//System.out.println("Max len: "+maxLen+" Curr Len: "+currLen);
//maxLet = currLet;
currLen = 1;
}
boolean atBeginning = true;
if(currPos == 0)
{
atBeginning = true;
}
else if(currPos != 0)
{
atBeginning = false;
}
if(atBeginning == false) //if not at the beginning of the string
{
if(currLet != str.charAt(currPos+1) && currLet == str.charAt(currPos-1))
{
currLen++;
}
}
if(currLen > maxLen)
{
maxLen = currLen;
currLen = 1;
}
}
return maxLen;
}
public static void main(String args[])
{
int result = longestRep("abcdeeefeeeefppppppp");
System.out.println(result);
}
Однако, я получаю недействительные ответы и не знаю, что я сделал неправильно. Я новичок в Java и очень признателен за любую помощь, которую я могу получить! Часть коды я только проданной и может/не может быть использован.
Определить '' недопустимые ответы ''пожалуйста. –
[поиск Stackoverflow: Java длинная последовательность] (http://stackoverflow.com/search?q=%5Bjava%5D+longest+sequence+) –
вы можете инициализировать atBeginning так: булевы atBeginning = (currPos == 0); или еще лучше вы могли бы просто избавиться от него вообще и использовать, если вместо того, если (atBeginning == ложь) – samgak