如何通过最小字母差异(1)检测每个连续字符与前一个字符不同的字符序列?

时间:2016-05-05 06:38:58

标签: javascript

我想检测每个连续字符与前一个字符不同的字符序列,其中1是“字母差异”。在标准字母表中,index("b")-index("a")=1, index("z")-index("y")=1, index("z")-index("x")=2,依此类推。 我想要的是用它的第一个和最后一个字符替换这些序列,删除它们之间的所有内容。请注意,如果此序列中只有两个字符,则无需替换。如果订单是反向的,则无需更换,例如"dcba"
例如,

"dabcehklopqrsafxwvu012345678910210"  

应该转化为

"dacehklosafxwvu0910210"  

3 个答案:

答案 0 :(得分:2)

有趣的是,昨天我解决了完全相同的问题:)。

尝试使用以下解决方案:

class VocabCursorAdapter extends CursorAdapter {
    List<Integer> selectedItemsPositions;//to store all selected items position

    public VocabCursorAdapter(Context context, Cursor c,int flags) {
        super(context, c,0);
        selectedItemsPositions = new ArrayList<>();
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup viewGroup) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_vocab, viewGroup, false);
        CheckBox box = (CheckBox) view.findViewById(R.id.editCheckbox);
        box.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                int position = (int) compoundButton.getTag();
                if (b) {
                    //check whether its already selected or not
                    if (!selectedItemsPositions.contains(position))
                        selectedItemsPositions.add(position);
                } else {
                    //remove position if unchecked checked item
                    selectedItemsPositions.remove((Object) position);
                }
            }
        });
        return view;
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {

        //your other stuff

        CheckBox box = (CheckBox) view.findViewById(R.id.editCheckbox);
        box.setTag(cursor.getPosition());

        if (selectedItemsPositions.contains(cursor.getPosition()))
            box.setChecked(true);
        else
            box.setChecked(false);
    }
}

检查working demo

答案 1 :(得分:1)

单循环解决方案

&#13;
&#13;
var code = 'dabcehklopqrsafxwvu012345678910210',
    result = '',
    i = 0, l;

for (i = 0, l = code.length; i < l; i++) {
    result += 
        i > 0 &&
        i + 1 < l && 
        code.charCodeAt(i - 1) + 1 === code.charCodeAt(i) &&
        code.charCodeAt(i) + 1 === code.charCodeAt(i + 1) ?
            '' : 
            code[i];
}

document.write(result);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

我认为您输入的示例答案不正确...因为您仍然互相克服了......

无论如何,您的代码应如下所示:

var x = "dabcehklopqrsafxwvu012345678910210";
    var z = x;
    for (var i = 1; i < x.length - 1; i++)
        if (x.charCodeAt(i) == x.charCodeAt(i + 1) - 1) {
            x = x.replace(x.charAt(i) + x.charAt(i + 1), x.charAt(i));
        }
    alert(x);

这里的问题是12345是否应该是135,在你的样本中klopq变成了klo ......?