小编NGa*_*bit的帖子

拖曳一个字符串,使两个相邻的字母不相同

我一直在努力解决这个面试问题,要求对一个字符串进行洗牌,以便没有两个相邻的字母是相同的.例如,

ABCC - > ACBC

我想到的方法是

1)迭代输入字符串并将(字母,频率)对存储在某个集合中

2)现在通过拉出我们不仅仅拉动的最高频率(即> 0)字母来构建结果字符串

3)每当我们拉信时更新(减少)频率

4)如果所有字母的频率为零,则返回结果字符串

5)如果我们只剩下一个频率大于1的字母,则返回错误

通过这种方法,我们可以为最后一个保存更珍贵(不太频繁)的字母.但为了实现这一点,我们需要一个集合,让我们可以有效地查询密钥,同时有效地按值对其进行排序.喜欢的东西会工作,除了我们需要保持每个字母检索排序后的集合.

我假设是Unicode字符.

关于使用什么集合的任何想法?还是另一种方法?

c# string algorithm data-structures

13
推荐指数
1
解决办法
1613
查看次数

删除多余的括号

题:

从字符串中删除额外的括号。
例如

    ((a+b))*c       => (a+b)*c  
    (a+b)+c         => (a+b)+c  
    ((a+b)/(c+d))   => ((a+b)/(c+d))   
    (a+(((b-c)))*d) => (a+(b-c)*d)  and so on.
Run Code Online (Sandbox Code Playgroud)

我提出了以下解决方案:
方法:我扫描字符串并记住(使用地图)左括号的索引以及它是否是额外的(默认情况下它是额外的)。如果我找到一个右括号,我会从地图中检查相应的左括号,如果它是多余的,则将两者都删除。

void removeExtraParentheses(string& S){
  map<int, bool> pmap;
  for(int i = 0; i < S.size(); i++){
    map<int, bool>::iterator it;
    if(S.at(i) == '('){
        pmap[i] = true;
    }
    else if(S.at(i) == ')'){
        it = pmap.end();
        it--;
        if(!(*it).second){
            pmap.erase(it);
        }
        else{
            S.erase(S.begin() + i);
            S.erase(S.begin() + (*it).first);
            pmap.erase(it);
            i = i - 2;
        }
    }
    else{
        if(!pmap.empty()){
            it = pmap.end();
            it--;
            (*it).second= false;
        }
    } …
Run Code Online (Sandbox Code Playgroud)

c++ string expression map parentheses

5
推荐指数
1
解决办法
7441
查看次数

Python str.format()方法无法按预期工作

我正在尝试格式化我正在屏幕上打印的一些输出.这是我的代码:

someString = someList[someIndex] +  '{0:<8}'.format('\t') + someList[someOtherIndex]
print someString
Run Code Online (Sandbox Code Playgroud)

我的预期输出:

abcdefghi              someOutput
abcde                  someOtherOutput

**OR**
abcdefghi       someOutput
abcde           someOtherOutput

实际输出我得到:

abcdefghi              someOutput
abcde          someOtherOutput

问题1:为什么我没有得到预期的输出?具体来说,为什么第二列中的条目不对齐?
问题2:我应该在代码中更改什么才能获得预期的输出?

附加信息:我使用的是Python 2.6

感谢任何帮助.

python

1
推荐指数
1
解决办法
502
查看次数

C++指针与数组和指针转换

我正在尝试以下代码:

unsigned long * foo = (unsigned long *) 0x200000;
Run Code Online (Sandbox Code Playgroud)

所以,据我所知,foo指向无符号长0x200000.现在,如果我尝试,

std::cout<<foo[0];
Run Code Online (Sandbox Code Playgroud)

我认为这应该打印值0x200000(可能是十进制).因为,foo[0] = *(foo + 0) = 0x200000.但是,它实际上是打印的0.

我在这里缺少什么?

c++ arrays pointers casting

1
推荐指数
1
解决办法
203
查看次数

优化算法以查找满足特定属性的六位数字的数量

问题:"一种算法,用于查找六位数字的数字,其中前三位数的总和等于最后三位数的总和."

我在一次采访中遇到了这个问题,想知道最好的解决方案.这就是我现在所拥有的.

方法1:当然,蛮力解决方案是检查每个数字(在100,000和999,999之间)的前三位和后三位的总和是否相等.如果是,则递增某个计数器,该计数器保持所有这些数字的计数.

但这会检查所有900,000个数字,因此效率低下.

方法2:由于我们被问到"有多少"这样的数字而不是"哪个数字",我们可以做得更好.将数字分为两部分:前三个数字(从100到999)和后三个数字(从000到999).因此,候选数字的任一部分中的三个数字的总和可以在1到27的范围内.
*std::map<int, int>对于每个部分保持a ,其中key是和,并且值是在相应部分中具有该总和的数字(3位数).
*现在,对于第一部分中的每个数字,找出它的总和并更新相应的地图.
*同样,我们可以获得第二部分的更新地图.*现在通过乘以相应的对(例如,键4的映射1中的值和键4的映射2中的值)并将它们相加,我们得到答案.

在这种方法中,我们最终检查1K数字.

我的问题是我们如何进一步优化?有更好的解决方案吗?

c++ algorithm

1
推荐指数
1
解决办法
2649
查看次数

删除的DOM元素仍然出现在页面上

我正在尝试动态添加/删除DOM元素(id ="result").添加似乎工作正常,但删除后元素仍然出现在页面上.

这里发生了什么事?我究竟做错了什么?

这是我的代码:

<!DOCTYPE html>
<html>
  <body>
    <script>
      function clearResult() {
        if (document.getElementById("result") != null){
            alert("remove #result");
            $("#result").remove();
            if (document.getElementById("result") != null) {
                alert("#result still exists");
            }
        }
        alert("Exiting clearResult");
      }

      function search() {
        clearResult();
         if (document.getElementById("result") == null) {
            alert("add #result");
            $('<table id="result"><tr>I am a table</tr></table>').appendTo('#ex');
         }                  
      }      
    </script>

    <div>
      <button id="search" onclick="search()" value="Send">Search</button>
    </div>     
    <div id="ex">
      @*Add result table here dynamically*@
    </div>

  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

html javascript jquery dom

1
推荐指数
1
解决办法
519
查看次数

SQL查询:获取某些列的值最大的行

以下是我正在处理的数据示例:

Ei (第一列)是主键.

 E0 S0 DT0 V1
 E1 S1 DT1 V1
 E2 S1 DT2 V1
 E3 S1 DT3 V3
Run Code Online (Sandbox Code Playgroud)

我想过滤这个得到:

 E0 S0 DT0 V1
 E3 S1 DT3 V3
Run Code Online (Sandbox Code Playgroud)

基本上,获取行,如果它们相同,Si则选择具有最高/最大的行Vi.Vi形式为w.xy.z(其中w,x,y,z是整数).

我不知道怎么做到这一点.有什么指针吗?

sql sql-server greatest-n-per-group

0
推荐指数
1
解决办法
133
查看次数