• Palindrome Index(回文字符串)


    C++字符串长度获取函数以及其区别:
    (C/C++ strlen(str)和str.length()和str.size()都可以求字符串长度。
    其中str.length()和str.size()是用于求string类对象的成员函数 strlen(str)是用于求字符数组的长度,其参数是char*。)
    Probelm: 给你一个仅由小写字母组成的字符串。你的任务是找出一个位置,删掉那个字母之后,字符串变成回文的。总会有一个合法的解。如果给定的字符串是一个回文串,那么
    -1也将被当作其中一个合法的解。 输入格式 第一行包含T,测试数据的组数。 后面跟有T行,每行包含一个字符串。 输出格式 如果可以删去一个字母使它变成回文串,则输出任意一个满足条件的删去字母的位置(下标从0开始)。例如: bcbc 我们可以删掉位置0的b字符,或者位置3的c字符。两个答案都是正确的。 约束条件 1 ≤ T ≤ 20 1 ≤ 字符串的长度 ≤ 100005 所有字符都是小写字母 输入样例 #00 3 aaab baa aaa 输出样例 #00 3 0 -1 解释 在给定的输入中,T =3 +对于输入aaab,我们可以发现删掉字母b可以使得原串变为回文串,因此输出位置3。
    +对于输入baa,我们可以发现删掉字母b可以使得原串变为
    回文串,因此输出位置0。 +对于输入aaa,我们发现它已经是回文串了,所以输出-1
    #include <bits/stdc++.h>
    
    using namespace std;
    
    bool palindrome(string s,int first,int last){
        while(first<last){
            if(s[first] == s[last])
            {
                first++;
                last--;
            }else{
                break;
            }
        }
        if(first >= last){
            return true;
        }
        else
            return false;
    }
    int palindromeIndex(string s){
        // Complete this function
        int len = s.length() ;
      
        int resultIndex = -1;
        int firstIndex = 0;
        int lastIndex = len-1;
        while(firstIndex < lastIndex){
            if(s[firstIndex] == s[lastIndex]){
                firstIndex++;
                lastIndex--;
            }
            else{
                break;
            }
        }
        if(firstIndex >= lastIndex){
            resultIndex = -1;
        }
        else{
            if(palindrome(s,firstIndex+1,lastIndex))
            {
                resultIndex = firstIndex;
            }
            else if(palindrome(s,firstIndex,lastIndex-1))
            {
                resultIndex = lastIndex;
            }
        }
        return resultIndex;
    }
    
    int main() {
        int q;
        cin >> q;
        for(int a0 = 0; a0 < q; a0++){
            string s;
            cin >> s;
            int result = palindromeIndex(s);
            cout << result << endl;
        }
        return 0;
    }
  • 相关阅读:
    牛客网-湘潭大学校赛重现H题 (线段树 染色问题)
    bzoj 2243: [SDOI2011]染色 (树链剖分+线段树 区间合并)
    SPOJ QTREE2 (LCA
    Neo4j-Cypher
    MySQL避免插入重复记录:唯一性约束
    python ftp教程
    Neo4j 导入 CSV 文件
    jupyter notebook 安装 jupyter_contrib_nbextension
    python 性能分析(时间,空间)之 line_profiler 模块 ,memory_profiler的使用
    hive 自定义函数
  • 原文地址:https://www.cnblogs.com/lyf-sunicey/p/8482039.html
Copyright © 2020-2023  润新知