给一个字符串 由RGB(红绿蓝)3种字母组成

这是一篇关于某软上机题的解析,题目要求处理由RGB组成的字符串。作者分享了个人的解题思路,尽管代码可能较为繁琐,但核心在于指针移动、辅助变量和访问记录。作者欢迎对题目有见解的读者提出优化建议和交流讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是一道某软上机题,来源不知,我经过一番周折写出,由于没有在网上看到,搜到这个题目(也可能是我搜索的方式不对),因此记录在这里,一是再次整理一次及保存自己的思路,二是在我自己看来我觉得我写的有一点繁琐,有待优化的地方,或者有其他更优的解法,由于我也没有这个题的所有测试用例,自己尝试了一些用例,皆是正确的,可能会有遗漏,欢迎对此题有见解的朋友批评指正,沟通交流

package cn.zz.jishi;

import java.util.ArrayList;

public class RGB {
    /*
    原题:
    给一个字符串 由RGB(红绿蓝)3种字母组成
    找出串中最长的相同子串,输出字母以及所在位置,然后剔除(如有多个相同拿最左的子串)
    将剩余部分按序连接,如果只有一个字母则结束游戏,否则返回第一步
    注意每次输出的位置为原始串中的位置
    例:RBBGGR
        B 2 3
        G 4 5
        R 1 6
    我的思路:
    利用沉岛思想,当我每遍历完一次时,把这次的结果的位置改为0,
    比如"RBBGGGR",第一次遍历求出G 3 4 5,字符串变为 RBB000R,
    第二次遍历时,得到 B 1 2,字符串变为R00000R以此类推...
    至于如何找到每一轮遍历的结果,并且输出最长的
    第一轮遍历
    设定两个初始链表,maxlist(放置目前找到的最长的),curlist(放置当前在找的)
    对应两个变量 max(找到的最长的多场) 和 currentmax(当前的多长)
    设置两个字符变量 maxchar(找到的最长的那个对应的字符) 和 curchar(当前在找的的字符)
    两个指针 begin end 分别指向相连字符的开头和结尾
    第二次遍历
    下面每一条语句都有注释,如果看不懂或者觉得有一点繁琐,那么用例子,纸上画画,或者debug跟着走一遍就清晰了
     * */
    public static void main(String[] args) {
        findMax("RBBGGGR");
    }

    public static
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值