algorithm - 修剪 <= 2 个字符的字符串

标签 algorithm string

假设给你一个输入字符串:

"my name is vikas"

建议将其修改为的算法:

"name vikas"

这意味着删除长度为 <=2 的单词或者说 k字符,使其通用。

最佳答案

我认为您可以在 O(n) 时间内就地完成此操作。遍历字符串,保留一个指向您正在处理的单词的开头的指针。如果发现单词的长度大于 k,则用该单词覆盖字符串的开头。这是一个 C 代码(它假定每个单词都由精确的空格分隔):

void modify(char *s, int k){

    int n = strlen(s);
    int j = 0, cnt = 0, r = 0, prev = -1;
    s[n++] = ' ';  // Setinel to avoid special case
    for(int i=0; i<n; i++){
        if(s[i] == ' '){
            if (cnt > k){
                if(r > 0) s[r++] = ' ';
                while(j < i) s[r++] = s[j++];
            }       
            cnt = 0;
        }
        else {
            if (prev == ' ') j = i;
            cnt++;
        }
        prev = s[i];
    }
    s[r] = '\0';
}
int main(){

    char s[] = "my name is vikas";
    modify(s, 2);
    printf("%s\n", s);
}

关于algorithm - 修剪 <= 2 个字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4746665/

相关文章:

c# - 转换字符串之间的区别

c++ - 对象析构函数中 "string"成员是否需要调用析构函数?

java - 如何使用正则表达式匹配所有数字字符和一些单个字符

c# - 向树添加分支

c# - 将 int 转换为 6 个字符的字母数字字符串的算法

java - n对括号的组合

javascript - 尝试按百分比增加进度条

java - 在 Java 中处理 TAB 字符

python - 寻找独立集的算法

string - 无法将类型 'GeoPoint?' 的值分配给类型 'AnyObject?' 的值