• Week15 实验


    题目描述:

    新式字符串定义如下:

    1. 长度为偶数(可以为空)
    2. 每一个奇数位置的字符都不等于它后面的那个字符

    例如,字符串 good、string、xyyx 都符合要求,而字符串 bad、aa、aabc 则不符合。

    现在你获得了一个字符串 S,你需要从该字符串中删除最少的字符数,使其变成一个新式字符串。

    输出删除了多少个字符和最后的新式字符串。

    思路:

    • 从前往后处理是可以的,因为如果先处理后面的,则前面的一样要处理
    • 两个连续的字符,删除哪一个也是无所谓的
    • 只在奇数位置考虑,如果当前奇数位置是连续的aa,删除一个a,下一个a变成奇数位置继续判断
    • 如果当前奇数位置不是连续的,直接加2,跳到下一个奇数位
    • 考虑这种算法的特殊情况:N=1时,没有两个能比较的字符,结果是空串;N=2时,如果连续,则删除一个之后,剩下的一个没有可以比较的字符,是空串;N=2时,如果不连续,则就是这两个字符;N>=3时,属于一般情况

    代码:

    借鉴了用户”mrning“的代码

    //从前往后处理是可以的,因为如果先处理后面的,则前面的一样要处理
    //两个连续的字符,删除哪一个也是无所谓的
    //只在奇数位置考虑,如果当前奇数位置是连续的aa,删除一个a,下一个a变成奇数位置继续判断
    //如果当前奇数位置不是连续的,直接加2,跳到下一个奇数位
    #include <cstdio>
    #include <iostream>
    #include <string>
    using namespace std;
    const int MAXN = 2e5 + 5;
    string s;
    string ans;
    int main()
    {
    	int N, K = 0;
    	cin >> N >> s;
    	int i = 0;
    	while (i < N-1)
    	{
    		if (s[i] == s[i + 1])
    			++i;	
    		else
    		{
    			ans += s[i];
    			ans += s[i + 1];
    			i = i + 2;
    		}
    	}
    	cout << N - ans.size() << endl;
    	cout << ans << endl;
    	return 0;
    }
    

      

  • 相关阅读:
    关于W3Cschool定义的设计模式--常用的9种设计模式的介绍
    正则得介绍和使用——表单验证
    DOM的高级操作-一种JS控制元素的视觉假象
    如何理解JS中this指向的问题
    Vulkan中的实时软阴影与硬件优化
    TensorFlow Distribution(分布式中的数据读取和训练)
    TensorFlow白皮书
    TensorFlow Data模块
    新闻标签提取的评价方法
    基于TF-IDF的新闻标签提取
  • 原文地址:https://www.cnblogs.com/qingoba/p/12988804.html
Copyright © 2020-2023  润新知