1 条题解

  • 0
    @ 2006-12-5 9:10:12

    练70.3 删除单词后缀

    解题思路

    对三个候选后缀er、ly、ing,先检查长度是否足够,再比较末段是否相等;首个匹配就删除并停止。

    正确性说明

    依题目给出的对应关系逐项处理,位置与原输入保持明确对应。每一步完成当前项的全部贡献,结束后得到所有位置或字符的目标结果。

    易错点

    只删一次后缀,不反复继续删除新形成后缀。

    复杂度

    时间O(L),空间O(L)。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        string s;
        cin >> s;
        for (string tail : {string("er"), string("ly"), string("ing")})
            if (s.size() >= tail.size() &&
                s.compare(s.size() - tail.size(), tail.size(), tail) == 0) {
                s.resize(s.size() - tail.size());
                break;
            }
        cout << s << "\n";
        return 0;
    }
    
    • 1

    信息

    ID
    463
    时间
    1000ms
    内存
    128MiB
    难度
    入门
    标签
    递交数
    0
    已通过
    0
    上传者