• 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;
    }
  • 相关阅读:
    转载 设计模式大集锦 程序员面试全攻略
    转载 如何给项目选择最合适的编程语言?
    python–ntohll和htonll的实现(转载)
    python 动态加载模块和类
    转载 推荐9个非常有用的开发技巧给Web开发者
    python PyDev统一编码
    mysql 设置编码
    Python MySQLdb.connect连接lampp中mysql服务器问题的解决
    转载 Python编码时的注意事项
    转载 Web前端:11个让你代码整洁的原则
  • 原文地址:https://www.cnblogs.com/lyf-sunicey/p/8482039.html
Copyright © 2020-2023  润新知