360笔试:技术综合G卷

360 笔试:
代码题目
DNA 匹配问题
 就过了45%,不知道哪里出错了
#include <iostream>
#include<string>
using namespace std;
int findA(string s){
    int num=0;
    int len=s.length();
    for(int i=0;i<len;i++){
        if(s[i]=='A')num++;
    }
    return num;


}
int findT(string s){

   int num=0;
    int len=s.length();
    for(int i=0;i<len;i++){
        if(s[i]=='T')num++;
    }
    return num;

}


int f(string s1,string s2){
    int lens1=s1.length();
    int lens2=s2.length();
    if(lens1!=lens2)return 0;
    int lens1_A=findA(s1);  
    int lens1_T=findT(s1);
    int lens2_A=findA(s2);
    int lens2_T=findT(s2);
    int num=0;

    //
    if(lens1_A>lens2_A){
        int tem=lens1_A-lens2_A;
        for(int i=0;i<lens1;i++){
            if(tem==0)break;
            if(s1[i]=='A'){
                s1[i]='T';
                tem--;
                num++;
            }
        }
    }else if(lens1_T>lens2_T){
        int tem1=lens1_T-lens2_T;
        for(int i=0;i<lens2;i++){
            if(tem1==0)break;
            if(s1[i]=='T'){
                s1[i]='A';
                tem1--;
                num++;
            }
        }
    }


    for(int i=0;i<lens1;i++){
        if(s1[i]==s2[i])continue;
        else{
                //
            if(s2[i]=='A'){
                int index1=i+1;
                while(index1<lens1){
                    if(s1[index1]=='A'){
                        char c=s1[index1];
                        s1[index1]=s1[i];
                        s1[i]=c;
                        num++;
                        break;
                    }else{
                        index1++;
                    }
                }
            }

            //
            if(s2[i]=='T'){
                int index2=i+1;
                while(index2<lens1){
                    if(s1[index2]=='T'){
                        char c=s1[index2];
                        s1[index2]=s1[i];
                        s1[i]=c;
                        num++;
                        break;
                    }else{
                        index2++;
                    }
                }
            }


        }
    }
    return num;


}

int main()
{
    string s1,s2;
    cin>>s1>>s2;
    cout<<f(s1,s2);



    return 0;
}


#360笔试##360公司##笔试题目#
全部评论
求大佬给出正确答案
点赞 回复 分享
发布于 2020-03-24 21:46
**。哥们你够狠。我觉得这个是个easy题,虽然我也没有AC哈哈哈哈
点赞 回复 分享
发布于 2020-03-24 21:46
class Solution:     def s1(self):         arr1 = list(input().strip())         arr2 = list(input().strip())         arr3 = []         arr4 = []         count = 0         for i in range(len(arr1)):             if arr1[i]!=arr2[i]:                 arr3.append(arr1[i])                 arr4.append(arr2[i])         for j in range(len(arr4)):             if arr3[j]!=arr4[j]:                 s1 = j                 while s1<len(arr3):                     if arr3[s1]==arr4[j] and arr4[s1]!=arr4[j]:                         temp =arr3[s1]                         arr3[s1] =arr3[j]                         arr3[j] = temp                         count+=1                         break                     s1+=1         for k in range(len(arr4)):             if arr3[k]!=arr4[k]:                 count+=1         print(count) 侥幸A了😂
点赞 回复 分享
发布于 2020-03-24 21:50
我的思路是: 先统计A和T的个数,如果不相等,先转换,之后再调位置
点赞 回复 分享
发布于 2020-03-24 22:02
直接找str1和str2不同的部分中的a和t的最大个数   。 private static int minCount(String str1, String str2) {         int acount = 0;         int tcount = 0;         for (int i = 0; i < str1.length(); i++) {             if (str1.charAt(i) != str2.charAt(i)) {                 if (str1.charAt(i) == 'A') {                     acount++;                 } else {                     tcount++;                 }             }         }         return Math.max(acount,tcount);     }
点赞 回复 分享
发布于 2020-03-24 22:03
想复杂了吧..不相同字母的数目-两字符串a出现次数的差值/2就行了....
点赞 回复 分享
发布于 2020-03-24 22:08
敢问楼主是技术综合卷都是啥题鸭
点赞 回复 分享
发布于 2020-04-15 09:50

相关推荐

野猪不是猪🐗:把你的学校加黑,加粗,斜体,下划线,描边,内阴影,内发光,投影,外发光,再上渐变色,居中,放大到最大字号,再把简历里其它内容删了,就行了
点赞 评论 收藏
分享
MScoding:你这个实习有一个是当辅导老师,这个和找技术岗没有关系吧?
点赞 评论 收藏
分享
评论
点赞
7
分享

创作者周榜

更多
牛客网
牛客企业服务