1147-段式回文

该问题涉及字符串处理,目标是找到一种方式将给定字符串分割成k个子串,满足特定条件。提供的解决方案采用贪心算法,逐个添加字符构建两个子串s1和s2,当它们相等时增加答案计数器,并重置子串。最后返回答案的两倍加一作为最大可能的k值。
摘要由CSDN通过智能技术生成

你会得到一个字符串 text 。你应该把它分成 k 个子字符串 (subtext1, subtext2,…, subtextk) ,要求满足:

subtexti 是 非空 字符串
所有子字符串的连接等于 text ( 即subtext1 + subtext2 + ... + subtextk == text )
对于所有 i 的有效值( 即 1 <= i <= k ) ,subtexti == subtextk - i + 1 均成立
返回k可能最大值。

来源:力扣(LeetCode)
 


class Solution {

   public int longestDecomposition(String text) 
    {
        int n=text.length();
        int i=0;
        int j=n-1;
        int ans=0;
        String s1,s2;
        s1="";
        s2="";
        while(true)
        {
            if(i>=j)
            break;
            s1+=text.charAt(i);
            s2=text.charAt(j)+s2;
            if(s1.equals(s2))
            {
                ans++;
                s1="";s2="";
                if(i+1==j)
                return 2*ans;
            }
            i++;j--;
        }
        return ans*2+1;
    }
}

较为简单的贪心算法。

注意:String类型比较内容,应该用equals方法最为妥当,

           str的扩展顺序要特别注意。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值