我有一个字符串
String alpha="AAAABBCCCDAA";
我需要在这个字符串中进行一些处理并计算每个字符,并且应该产生像
这样的结果 4A2B3C1D2A
我的代码工作正常,但计算A整体不计算最后一个A
String text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
String alpha = "AAAABBCCCDAA";
for (char a : text.toCharArray()) {
int counter = 0;
for (char b : alpha.toCharArray()) {
if (a == b)
counter++;
}
if (counter != 0) {
System.out.print(counter);
System.out.print(a);
}
结果是:6A2B3C1D
我应该在代码中加入什么样的逻辑和想法?
答案 0 :(得分:0)
您不需要使用嵌套循环来满足这种简单的要求, 由于你必须找到连续的字符,你可以用 O(n)时间复杂度来实现这一点。
public static void printOccurrences( String str )
{
int len = str.length();
char[] arr = str.toCharArray();
char contChar = arr[0];
int count = 0;
StringBuffer sb = new StringBuffer();
for( int i = 0; i < arr.length; i++ )
{
if( contChar == arr[i] )
{
count++;
// this below condition helps you to add that last A missed frequency
if( i + 1 >= arr.length )
{ // Since after this iteration loop will not enter the else block
sb.append( count ).append( contChar );
}
}
else
{
sb.append( count ).append( contChar );
contChar = arr[i];
count = 0;
i--;
}
}
System.out.println( sb.toString() );
}
printOccurrences("AAAABBCCCDAA"); // Input
您的输出 4A2B3C1D2A