767. Reorganize String

本文介绍了一种高效的字符串重组算法,该算法能在给定条件下检查并重组字符串,确保相邻字符不相同。通过排序计数的方法,文章详细阐述了如何实现这一目标,并提供了C++代码示例,展示了算法的具体实现过程及性能优势。

Given a string S, check if the letters can be rearranged so that two characters that are adjacent to each other are not the same.

If possible, output any possible result.  If not possible, return the empty string.

Example 1:

Input: S = "aab"
Output: "aba"

Example 2:

Input: S = "aaab"
Output: ""

Note:

  • S will consist of lowercase letters and have length in range [1, 500].

 

Approach #1 Sort by count:

class Solution {
public:
    string reorganizeString(string S) {
        int len = S.length();
        vector<int> count(26, 0);
        string ans = S;
        for (auto s : S) count[s-'a'] += 100;
        for (int i = 0; i < 26; ++i) count[i] += i;
        sort(count.begin(), count.end());
        int start = 1;
        int mid = (len + 1) / 2;
        for (int i = 0; i < 26; ++i) {
            int times = count[i] / 100;
            char c = 'a' + (count[i] % 100);
            if (times > mid) return "";
            for (int j = 0; j < times; ++j) {
                if (start >= len) start = 0;
                ans[start] = c;
                start += 2;
            }
        }
        //ans += '\0';
        return ans;
    }
};
Runtime: 0 ms, faster than 100.00% of C++ online submissions for Reorganize String.

 

 

转载于:https://www.cnblogs.com/ruruozhenhao/p/9884224.html

CREATE TABLE IF NOT EXISTS ZTCA.GEN_LED_VOUCHER_ROW_UNION_QRY ( `COMPANY` VARCHAR(50) COMMENT 'COMPANY', -- Changed from STRING to VARCHAR `VOUCHER_TYPE` VARCHAR(20) COMMENT 'VOUCHER_TYPE', -- Changed from STRING to VARCHAR `VOUCHER_NO` BIGINT COMMENT 'VOUCHER_NO', `ACCOUNTING_YEAR` INT COMMENT 'ACCOUNTING_YEAR', -- 分区字段(整数类型) `ROW_NO` DOUBLE COMMENT 'ROW_NO', `ACCOUNTING_PERIOD` DOUBLE COMMENT 'ACCOUNTING_PERIOD', `VOUCHER_DATE` DATETIME COMMENT 'VOUCHER_DATE', `APPROVAL_DATE` DATETIME COMMENT 'APPROVAL_DATE', `YEAR_PERIOD` STRING COMMENT 'YEAR_PERIOD', `YEAR_PERIOD_KEY` DOUBLE COMMENT 'YEAR_PERIOD_KEY', `ACCOUNT_TYPE` STRING COMMENT 'ACCOUNT_TYPE', `ACCOUNT_GROUP` STRING COMMENT 'ACCOUNT_GROUP', `INTERNAL_SEQ_NUMBER` DOUBLE COMMENT 'INTERNAL_SEQ_NUMBER', `POSTING_COMBINATION_ID` DOUBLE COMMENT 'POSTING_COMBINATION_ID', `ACCOUNT` STRING COMMENT 'ACCOUNT', `ACCOUNT_DESC` STRING COMMENT 'ACCOUNT_DESC', `CODE_J` STRING COMMENT 'CODE_J', `CODE_J_DESC` STRING COMMENT 'CODE_J_DESC', `TRANS_CODE` STRING COMMENT 'TRANS_CODE', `TEXT` STRING COMMENT 'TEXT', `DELIV_TYPE_ID` STRING COMMENT 'DELIV_TYPE_ID', `JOU_NO` INT COMMENT 'JOU_NO', `OBJID` STRING COMMENT 'OBJID', `OBJVERSION` STRING COMMENT 'OBJVERSION', `OBJKEY` STRING COMMENT 'OBJKEY' ) ENGINE=OLAP DUPLICATE KEY(COMPANY, VOUCHER_TYPE, VOUCHER_NO, ACCOUNTING_YEAR) -- Now using VARCHAR columns COMMENT '总账凭证行联合查询表(按年动态分区)' PARTITION BY RANGE(ACCOUNTING_YEAR) -- 仅按年份分区 ( PARTITION p2024 VALUES LESS THAN (2025), -- 2024年 PARTITION p2025 VALUES LESS THAN (2026), -- 2025年(当前年) PARTITION p2026 VALUES LESS THAN (2027), -- 2026年(未来) PARTITION p_future VALUES LESS THAN MAXVALUE -- 2027年及以后的默认分区 ) DISTRIBUTED BY HASH(VOUCHER_NO) BUCKETS 16 PROPERTIES ( "replication_num" = "3", -- 3副本 "storage_format" = "V2", -- 列式存储V2 "enable_persistent_index" = "true" );
最新发布
04-01
<think>好的,我需要帮助用户理解如何设置全局变量,同时他们可能是在看到某个符号链接的示例后提出的这个问题。首先,我需要确认用户的需求是什么。他们可能是在看到`lrwxrwxrwx 1 root root 26 Mar 24 15:56 /usr/local/lib/libdwarves_reorganize.so -> libdwarves_reorganize.so.1`这个文件列表的输出后,想了解如何设置全局变量,可能是在Linux环境下设置环境变量。 首先,我需要回顾Linux中设置全局变量的方法。通常,这涉及到在shell配置文件如`/etc/profile`、`/etc/environment`或者用户主目录下的`.bashrc`、`.bash_profile`中添加变量。另外,符号链接可能与库文件有关,用户可能在配置环境变量如`LD_LIBRARY_PATH`时遇到问题,需要将库路径包含进去。 接下来,我需要分步骤解释如何设置全局变量,确保涵盖不同的方法,比如临时设置和永久设置。同时,要提到环境变量和Shell变量的区别,以及如何让变量对所有用户生效,或者仅对当前用户生效。 用户提供的示例中的符号链接可能是一个共享库的链接,因此可能需要设置`LD_LIBRARY_PATH`来包含该库的路径。这也需要解释如何正确设置这个变量,以便系统能够找到共享库。 还要注意用户可能的权限问题,比如修改全局配置文件需要root权限,而用户主目录下的文件则不需要。需要提醒用户在使用`sudo`或编辑系统文件时的注意事项,避免误操作。 另外,需要检查是否有常见的错误,比如路径错误、语法错误(如缺少引号或变量名错误),以及如何验证变量是否设置成功,比如使用`echo $VARIABLE_NAME`或者`env`命令。 最后,可能需要提供一些实际应用的例子,比如设置Java的`JAVA_HOME`或者Python的`PYTHONPATH`,帮助用户更好地理解如何应用这些步骤到他们的具体场景中。 总结来说,回答需要结构清晰,分步骤说明不同的设置方法,解释相关概念,提醒注意事项,并提供验证方法,确保用户能够正确设置全局变量,并理解其背后的原理。</think>在 Linux 系统中,设置全局变量(环境变量)可通过以下步骤实现。以下内容结合你提供的符号链接示例(`libdwarves_reorganize.so` 的软链接),重点讲解 **环境变量配置** 和 **共享库路径设置** 的关联操作: --- ### 一、全局变量类型与作用 1. **环境变量** 对所有用户或所有进程生效的变量,常用于配置程序依赖路径(如 `JAVA_HOME`、`LD_LIBRARY_PATH`)。 2. **Shell 变量** 仅在当前 Shell 会话中有效,关闭终端后失效。 --- ### 二、设置全局环境变量(以共享库路径为例) #### 方法 1:通过 `/etc/environment`(系统级全局配置) 1. **编辑配置文件**(需 root 权限): ```bash sudo nano /etc/environment ``` 2. **添加变量**(例如 `LD_LIBRARY_PATH`,用于指定共享库路径): ```bash LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" ``` - 变量值包含 `/usr/local/lib`(你提供的 `libdwarves_reorganize.so` 所在目录)。 - `$LD_LIBRARY_PATH` 保留原有路径,避免覆盖。 3. **生效配置**: ```bash source /etc/environment ``` --- #### 方法 2:通过 `/etc/profile` 或 `/etc/profile.d/`(登录时加载) 1. **创建自定义配置文件**(推荐): ```bash sudo nano /etc/profile.d/custom_vars.sh ``` 2. **添加变量**: ```bash export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" ``` 3. **生效配置**: ```bash source /etc/profile ``` --- #### 方法 3:临时设置(仅当前会话有效) ```bash export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" ``` --- ### 三、验证变量是否生效 1. **查看变量值**: ```bash echo $LD_LIBRARY_PATH # 输出应包含 /usr/local/lib ``` 2. **测试共享库加载**: ```bash ldd /path/to/your/program | grep libdwarves_reorganize.so # 输出应显示库文件路径正确解析 ``` --- ### 四、符号链接与共享库的关系 你提供的示例: ```bash lrwxrwxrwx 1 root root 26 Mar 24 15:56 /usr/local/lib/libdwarves_reorganize.so -> libdwarves_reorganize.so.1 ``` - **作用**:软链接 `libdwarves_reorganize.so` 指向实际库文件 `libdwarves_reorganize.so.1`,方便版本管理。 - **依赖条件**:必须通过 `LD_LIBRARY_PATH` 或 `/etc/ld.so.conf` 包含 `/usr/local/lib`,系统才能找到该库。 --- ### 五、其他相关操作 #### 更新动态链接库缓存 若修改了库路径,需刷新缓存: ```bash sudo ldconfig ``` #### 永久配置库路径(替代环境变量) 1. **编辑 `/etc/ld.so.conf`**: ```bash sudo nano /etc/ld.so.conf ``` 2. **添加路径**: ``` /usr/local/lib ``` 3. **更新缓存**: ```bash sudo ldconfig ``` --- ### 总结 | **场景** | **推荐方法** | |-------------------------|----------------------------------| | 永久全局变量 | `/etc/environment` 或 `/etc/profile.d/` | | 临时测试 | `export` 命令 | | 共享库路径配置 | `LD_LIBRARY_PATH` 或 `/etc/ld.so.conf` | | 符号链接兼容性 | 确保软链接目标文件存在且路径正确 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值