文字列leetcode16242つの同一の文字間の最長の部分文字列

主題の内容

これが文字列sです。2つの同一の文字の間の最長の部分文字列の長さを返します。これらの2つの文字は、長さの計算には含まれません。そのような部分文字列がない場合は、-1を返します。

部分文字列は、文字列内の文字の連続シーケンスです。

例1:

入力:s = "aa"
出力:0
説明:最適な部分文字列は、2つの「a」の間の空の部分文字列です。

例2:

入力:s = "abca"
出力:2
説明:最適な部分文字列は "bc"です。

例3:

入力:s = "cbzxy"
出力:-1
説明:sに2回現れる文字がないため、-1が返されます。

例4:

入力:s = "cabbac"
出力:4
説明:最適な部分文字列は "abba"であり、他の非最適なソリューションには "bb"と ""が含まれます。

促す:

1 <= s.length <= 300
s 只含小写英文字母

ソース:LeetCode
リンク:https ://leetcode-cn.com/problems/largest-substring-between-two-equal-characters

c言語の答え

int maxLengthBetweenEqualCharacters(char * s){
    
    
    int len=strlen(s);
    int max=0;
    int i;
    char a[strlen(s)];
    for(i=0;i<len;i++){
    
    
        a[i]=s[i];
        for(int j=0;j<i;j++){
    
    
            if(s[i]==a[j]){
    
    
                if((i-j)>max)
                    max=i-j;
                break;
            }
        } 
    }
    return max-1;
}

総括する:

変数を使用して配列を定義することはできません。たとえば、char a [len]はエラーを報告します。定義を初期化するための適切な習慣を身に付ける必要があります。

count = 0が初期化されていないという理由だけで、間違ったコード

int maxLengthBetweenEqualCharacters(char * s){
    
    
    int len=strlen(s);
    int max=0;
    int i;
    // count用来判断是否有相等的两个字符,有了count就是1,没了就是0
    int count;
    char a[strlen(s)];
    for(i=0;i<len;i++){
    
    
        a[i]=s[i];
        for(int j=0;j<i;j++){
    
    
            if(s[i]==a[j]){
    
    
                count=1;
                if((i-j)>max)
                    max=i-j-1;
                break;
            }
        } 
    }
    if(count==1)
        return max;
    return -1;
}

おすすめ

転載: blog.csdn.net/mogbox/article/details/113046552