最近在准备南大软工的复试,正好把自己做的上机真题的解贴出来,希望可以帮助到对这道题有疑惑的同学。因为给自己限制了时间,所有没有做优化,望见谅。
题目:给一个字符串 由RGB(红绿蓝)3种字母组成
1.找出串中最长的相同子串,输出字母以及所在位置,然后剔除(如有多个相同拿最左的子串)
2.将剩余部分按序连接,如果只有一个字母则结束游戏,否则返回第一步
注意每次输出的位置为原始串中的位置
例:
RBBGGR
B 2 3
G 4 5
R 1 6
下面直接上代码。
public class Solution {
public void RGB(String S)
{
if(S.isEmpty())return ;
int [][]pos=new int [3][S.length()];//用三行来存储三个字母在预案字符串中出现的位置
char []arr=S.toCharArray();
int length=S.length();
int p1=0,p2=0,p3