题解/算法 {2663. 字典序最小的美丽字符串}

题解 {2663. 字典序最小的美丽字符串}

LINK: https://leetcode.cn/problems/lexicographically-smallest-beautiful-string/submissions/;

关于回文串的性质:
. 对于任何子串都不是回文串的字符串 s = [abcdef] 此时要在尾部添加一个字符 即abcdef X, 那么只要保证 X ≠ f ∧ X ≠ e X \neq f \land X \neq e X=fX=e, 那么 新的字符串 他的任何子串 也都不是回文的;

从后往前遍历i = [n-1, ..., 0], 让s[i]递增 即a,b,c,d,..., 一旦s[i]满足条件 (即!= s[i-1]!= s[i-2]) 比如当前是s1 s2 s[i] s3 s4 s5 ... 只要 K ≠ 3 K\neq 3 K=3 那么对于s3, s4, s5, ...这些元素 一定是有解的, 同样要满足s3 != {s2, s[i]}, s4 != {s[i], s3}, ...;

@DELIMITER

代码;

string smallestBeautifulString(string S, int K) {
    int n = S.size();
    char ma = 'a' + K - 1;
    bool succ = false;
    auto Valid = [&]( int _i){
        if( _i - 1 >= 0 && S[ _i] == S[ _i - 1]) return false;
        if( _i - 2 >= 0 && S[ _i] == S[ _i - 2]) return false;
        return true;
    };
    for( int i = n - 1; i >= 0; --i){
        while( S[ i] < ma){
            ++ S[ i];
            if( Valid( i)){
                for( int j = i + 1; j < n; ++j){
                    S[ j] = 'a' - 1;
                    while( S[ j] < ma){
                        ++ S[ j];
                        if( Valid( j)){ break;}
                    }
                    ASSERT_( Valid( j));
                }
                return S;
            }
        }
    }
    return "";
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值