当前位置:网站首页>1807. Replace the parentheses in the string

1807. Replace the parentheses in the string

2022-07-04 22:02:00 Mr Gao

1807. Replace the parentheses in the string

Give you a string s , It contains some pairs of brackets , Each bracket contains a Non empty Key .

 For example , character string  "(name)is(age)yearsold"  in , Yes   Two   Bracket pair , Each contains keys  "name"  and  "age" .

You know the values of many keys , These relationships are made up of two-dimensional string arrays knowledge Express , among knowledge[i] = [keyi, valuei] , The key keyi The corresponding value is valuei .

You need to replace all Pair of brackets . When you replace a pair of brackets , And the key it contains is keyi when , You need :

 take  keyi  And parentheses with the corresponding values  valuei  Replace .
 If from  knowledge  The value of a key cannot be found in , You need to  keyi  And brackets with question marks  "?"  Replace ( You don't need quotes ).

knowledge Each key in will appear at most once .s There will be no nested parentheses in .

Please return to replace all The result string after the bracket pair .

Example 1:

Input :s = “(name)is(age)yearsold”, knowledge = [[“name”,“bob”],[“age”,“two”]]
Output :“bobistwoyearsold”
explain :
key “name” The corresponding value is “bob” , So will “(name)” Replace with “bob” .
key “age” The corresponding value is “two” , So will “(age)” Replace with “two” .

Example 2:

Input :s = “hi(name)”, knowledge = [[“a”,“b”]]
Output :“hi?”
explain : Because I don't know the key “name” Corresponding value , So use “?” Replace “(name)” .

Example 3:

Input :s = “(a)(a)(a)aaa”, knowledge = [[“a”,“yes”]]
Output :“yesyesyesaaa”
explain : Same key in s There may be many times .
key “a” The corresponding value is “yes” , So put all the “(a)” Replace with “yes” .
Be careful , Not in brackets “a” It doesn't need to be replaced .

This problem is obviously relatively simple to use hash table, but , The author tried the conventional method this time , Interested can learn :


int f(char *s,int index,char ***knowledge,int knowledgeSize){
    
    int i;
    for(i=0;i<knowledgeSize;i++){
    
        char *p=knowledge[i][0];
        int j=index,k=0,r=0;
        while(s[j]!='('&&p[k]!='\0'){
    
            if(s[j++]!=p[k++]){
    
                r=1;
                break;
            }
        }
        if(r==0&&s[j]==')'&&p[k]=='\0'){
    
            return i;
        }

    }
    return -1;
}



char * evaluate(char * s, char *** knowledge, int knowledgeSize, int* knowledgeColSize){
    
char *re=(char *)malloc(sizeof(char )*(strlen(s)+2));
int resize=0;
int i=0;





while(s[i]!='\0'){
    
  // printf("|i %d ",i);
    if(s[i]!='('){
    
        re[resize++]=s[i];
      
    }
    else{
    
        int index=f(s,i+1,knowledge,knowledgeSize);
       
        if(index==-1){
    
            re[resize++]='?';
           
             
        }
        else{
    
        char *p=knowledge[index][1];
        int k=0;
        while(p[k]!='\0'){
    
         
             re[resize++]=p[k++];
              }
             
            }
            while(s[i]!=')'){
    
       
               i++;
            }



    }

      i++;
  
   
}
re[resize]='\0';
return re;


}
原网站

版权声明
本文为[Mr Gao]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/185/202207042123507550.html