輸出一個字串中最長的雙節棍字串
阿新 • • 發佈:2018-12-10
形似如同aa..bb..c..,其中字元a的個數等於字元c的個數,字元b的個數小於他們的個數。例如aaabbccc, AAABCCC等。求一個字串中最長的雙節棍字串。 思路: 找出該字串中每個字元出現了多少次,判斷其中雙節棍字串,找出長度最大的雙節棍字串。 例如: AAABBCCC 先計算出每個字元出現了多少次,得到兩個陣列data[A,B,C]、num[3,2,3]。有num陣列可以判斷其中有一個雙節棍字串。結合data陣列可以確定該雙節棍字串為AAABBCCC。
java程式如下:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
char[] data = str.toCharArray();
int size=0;
for (int i = 1; i < data.length; i++) {
if (data[i] != data[i - 1]) {
size++;
}
}
size++;
char [] data0 = new char[size];
int[] num0 = new int[size];
int intdex = 0;
HashMap<Character, Integer> map = new HashMap<>();
int num = 1;
for (int i = 1; i < data.length; i++) {
if (data[i] == data[i - 1]) {
num++;
} else {
data0[intdex] = data[i - 1];
num0[intdex] = num;
intdex++;
num=1;
}
}
data0[intdex] = data[data.length - 1];
num0[intdex] = num;
int max=-1;
int index=-1;
for (int i = 0; i < num0.length - 2; i++) {
if (num0[i] > num0[i + 1] && num0[i + 2] > num0[i + 1]) {
if (max<Math.min(num0[i], num0[i + 2])) {
max= Math.min(num0[i], num0[i + 2]);
index=i;
}
}
}
if (index>=0) {
int num2=Math.min(num0[index],num0[index + 2]);
for (int i = 0; i < num2; i++) {
System.out.print(data0[index]);
}
for (int i = 0; i < num0[index + 1]; i++) {
System.out.print(data0[index + 1]);
}
for (int i = 0; i <num2; i++) {
System.out.print(data0[index + 2]);
}
System.out.println();
} else {
System.out.println("NULL");
}
}
}