• 回文数索引(string类erase解题)


    题目描述

    给定一个仅由小写字母组成的字符串。现在请找出一个位置,删掉那个字母之后,字符串变成回文。请放心总会有一个合法的解。如果给定的字符串已经是一个回文串,那么输出-1。

    输入描述:

    第一行包含T,测试数据的组数。后面跟有T行,每行包含一个字符串。

    输出描述:

    如果可以删去一个字母使它变成回文串,则输出任意一个满足条件的删去字母的位置(下标从0开始)。例如:

    bcc

    我们可以删掉位置0的b字符。
    示例1

    输入

    复制
    3
    aaab
    baa
    aaa

    输出

    复制
    3
    0
    -1
    解题思路:用sting类的erase进行解题,注意用一次erase函数str本身就会删除,如果要保存最原始的str,应该将str赋值给copy,操作copy;
    erase常用用法:

    1. basic_string & erase(size_type pos=0, size_type n=npos);//本题采用的

    即从给定起始位置pos处开始删除, 要删除字符的长度为n, 返回值修改后的string对象引用

    2. iterator erase(const_iterator first, const_iterator last)

    删除迭代器[first, last)区间的所有字符,返回一个指向被删除的最后一个元素的下一个字符的迭代器.

    str.erase(str.begin() + 10, str.end());

    #include "iostream"
    #include "cstring"
    #include "string"
    #include "algorithm"
    #include "cmath"
    #include "set" 
    using namespace std;
    bool judge(int size,const string &s)
    {
    for(int i=0;i<size/2;i++){
        if(s[i]!=s[s.size()-1-i]) return true;//需要删除 
    }return false; 
    }
    int main()
    {
    int size;
    string str;
    cin>>size; 
    while(size-->0)
    {    
    cin>>str;
    if(judge(str.size(),str)==false) cout<<-1<<endl;
    else{
        int f=0;
        for(int i=0;i<str.size();i++){
            if(f==1) break;
            string copy=str;//操作copy,操作一次后重新将str赋值给copy 
            string tmp=copy.erase(i,1);
            for(int j=0;j<str.size()-1;j++){
                if(judge(tmp.size(),tmp)==false){
                    cout<<i<<endl;f=1;break;
                }
            }
        }
        
        
        
    }
    
    } 
    
    }

      

    不一样的烟火
  • 相关阅读:
    扫目录过狗过waf方法
    https://www.webshell.cc/6274.html
    使用WireShark生成地理位置数据地图
    Aircrack-ng 扩展 : Marfil 分布式破解WIFI
    秒爆十万字典:奇葩技巧快速枚举“一句话后门”密码
    Python使用python-nmap模块实现端口扫描器
    Pandas之索引
    pandas之时间序列
    Pandas之分组
    Pandas学习笔记(一)
  • 原文地址:https://www.cnblogs.com/cstdio1/p/11217633.html
Copyright © 2020-2023  润新知