程式員面試題精選(37):判斷字串是否是迴文字串或者是否含有迴文字元子串

來源:互聯網
上載者:User

題目來自BMY BBS演算法版,原題如下:

不僅能判斷規則的中心對稱,如123454321,還要能判斷如123456547890中的45654的不規則部分中心對稱

演算法思想

從第一個字元開始,逐個掃描,對每一個字元,尋找下一個相同字元,判斷這兩個字元之間的字串是否迴文。時間複雜度O(n^3),所以說是笨笨解,師弟說可以做到O(n^2)...

演算法實現

/*================================================================================

功能:判斷字串是否是迴文字串或者是否含有迴文字元子串

作者:sunnyrain

日期:2008-09-11

編譯環境:VC++6.0

==================================================================

#include<iostream>
using namespace std;
int find(char ch,char *str,size_t length) //尋找str開始的字串中第一個ch出現的位置,沒找到返回-1
{
        for(int i=0;i<length;i++)
        {
                if(ch == str[i])
                        return i;
        }
        return -1;
}

int isSym(char *str,size_t length)  //判斷一個字串是否全對稱,0對稱,-1不對稱
{
        for(int i=0;i<length/2;i++)
        {
                if(str[i] != str[length-i-1])
                        return -1;
        }
        return 0;
}

int isSymmetry(char *str,size_t length)//返回0表示全部對稱,-1表示無對稱,其他值表示局部對稱起始位置
{

        int begin=0,end;
        char ch;
        for(int i=0;i<length;i++)
        {
                ch = str[i];
                begin = end = i;
                while((begin = find(ch,str+end+1,length-end-1)) != -1)
                {
                        end = begin+end+1;
                        if(isSym(str+i,end-i+1) == 0)
                                return i;
                }
        }
        return -1;
}

int main()
{
        char aa1[] = "123454321";
        char aa2[] = "123456547890";
        char aa3[] = "781234327891";
        char aa4[] = "954612313217891";

        cout<<isSymmetry(aa1,sizeof(aa1)/sizeof(char)-1)<<endl;
        cout<<isSymmetry(aa2,sizeof(aa2)/sizeof(char)-1)<<endl;
        cout<<isSymmetry(aa3,sizeof(aa3)/sizeof(char)-1)<<endl;
        cout<<isSymmetry(aa4,sizeof(aa4)/sizeof(char)-1)<<endl;
        return 0;
}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.