摩根士丹利笔试

今晚两道题,都差一点点就写好了,结果一道没A,复盘一下。
第一次写笔试,说实话有点紧张。40分钟两道题,时间有点紧,都是有思路会写的,结果第一题cpp的编译器gcc好像直接隐式转换了,第二题忘记除2了。
下次继续努力

  1. 给定target字符串,要让与target字符转等长的全零字符串翻转成target,求解最小翻转次数,其中翻转规则如下:

    将给定位置以其右边的数字全部取反

    target: 0100

    全零字符串: 0000

    第一次从3的位置翻转:0011

    第二次从1的位置翻转:0100

    至少需要两次

    从最左边开始搜索,找到有几次变化,答案就是几

     int sol(string target) {
         int i = 0;
         int res = 0;
         // 找到最左边的0
         while(i < target.size() && target[i] == '0'){
             ++i;
         }
         // 不断寻找0 1
         while(i < target.size()){
             ++res;
             while(i < target.size() && target[i] == '1'){
                 ++i;
             }
             ++i;
             if(i < target.size())
                 ++res;
             while(i < target.size() && target[i] == '0'){
                 ++i;
             }
             ++i;
         }
         return res;
     }
  2. 给定两个字符串数组,例如A:["tea", "boy", "aaa"],B:["aet", "aoy", "aa"],要将A中的每一个字符串转化为B中,如果可以就是转换次数,例"tea"变成“aet”只需要0次,"boy"变成"aoy",需要1次, "aaa"变成"aa"不能则是-1,答案是[0,1,-1]

     vector sol(vector A, vector B) {
         int size = A.size();
         vector ans = vector(size, 0);
         for(int i=0; i numberTable(26, 0);
             for(char c : A[i]) numberTable[c-'a']++;
             for(char c : B[i]) numberTable[c-'a']--;
             int value = 0;
             for(int n : numberTable) {
                 value += abs(n);
             }
             ans[i] = value/2;
         }
         return ans;
     }
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇