从字符串中查找最后重复的字符

时间:2016-11-06 17:14:56

标签: python string

我有一个字符串abbccdeefght,我想从字符串中找到最后一个重复的字符。 对于上面的字符串,结果应该是字符'e'。 我尝试在python中使用Counter模块中的collections

from collections import Counter
c=Counter('abbccdeefght')
c

>>> Counter({'c': 2, 'b': 2, 'e': 2, 'a': 1, 'd': 1, 'g': 1, 'f': 1, 'h': 1, 't': 1})

但不确定如何继续

6 个答案:

答案 0 :(得分:1)

通过这种方式,您将获得最后一个重复字符的 index

def last_duplicate(line):
    c=Counter(line)
    #>>> Counter({'c': 2, 'b': 2, 'e': 2, 'a': 1, 'd': 1, 'g': 1, 'f': 1, 'h': 1, 't': 1})

    for i, x in reversed(line):
        if c[x] > 1:
            return len(line) - i - 1

当然,你可以很容易找到角色

答案 1 :(得分:0)

如果你从右向左移动,你的问题相当于找到第一个重复的字符。对于每个字符,检查它是否已包含在右侧的部分中。

这样的事情:

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "person_availability")
private List<Availability> availabilities;

说明:使用my_string = "abbccdeefght" for idx in range(len(my_string) - 2, -1, -1): char = my_string[idx] if char in my_string[idx + 1:]: print("Last duplicated character is: " + char) break 我们从比字符串长度小2的数字迭代range,一直到0.每次我们从位置idx获取一个字符并查看它是否已包含在位置idx的角色右侧的my_string部分中。如果是,我们会idx并结束我们的循环。

编辑: 根据您的进一步解释,这里是固定代码(从您的问题中不清楚)。现在我们还从右到左迭代字符,但检查字符是否包含在 left 的部分中。

print()

答案 2 :(得分:0)

input_string='abbccdeefght'

last_duplicate_string=[single_letter for single_letter in input_string if input_string.count(single_letter) > 1]

if last_duplicate_string:
    print "Last duplicate character from the string %s",last_duplicate_string[-1]
else:
    print "No duplicate character"

答案 3 :(得分:0)

您可以使用简单的算法

来完成
mystr = 'abbccdeefght'
size = len(mystr)-1
found = 0
i=0
while (1):
    if (mystr[size]==mystr[i]):
        print ("found ",mystr[size]," on index ",i+1," and index ",size+1)
        break
    i+=1
    if (i==size):
        i=0
        size-=1
    if (size==1):
        print ("not found")
        break

循环将在2个条件下中断。找到并且不再需要检查数据。 希望它有所帮助

答案 4 :(得分:0)

您可以尝试使用此代码。经过测试&#34;&#34;,&#34; abba&#34;,&#34; zzasd&#34;,&#34; zxcv&#34;,&#34; abbccdeefght&#34;

# enumerates reversed list
def reverse_enumerate(seq):
    p = -1
    for elem in seq[::-1]:
        yield p, elem
        p -= 1

str = "abbccdeefght"

for i, c in reverse_enumerate(str):
    # check element in left side
    if c in str[i-1::-1]:
        print(c, i)
        # print element, position
        break

答案 5 :(得分:-1)

我认为这是一个非常好的解决方案:

{% for education in education_list %}
<div id="div_education{{forloop.counter0}}" class="pr mb30">
    <button class="btn btn-profile profile-edit js_edit_education_btn" data-idx={{forloop.counter0}} data-role="button">Edit</button>
    <div class="row mt-10">
        <div class="col-sm-3 col-md-3">Institute Name</div>
        <div class="col-sm-9 col-md-9" data-role="input" data-editable>{{education.institute}}</div>
    </div>
    <div class="row mt-10">
        <div class="col-sm-3 col-md-3">Degree</div>
        <div class="col-sm-9 col-md-9" data-role="input" data-editable  data-type="qualification">{{education.degree}}</div>
    </div>
</div>

<form id="form_edit_education{{forloop.counter0}}" data-url='{% url "something" idx=forloop.counter0 %}' class="js_form_edit_education" style="display:none;">
    <div style="display:none"><input type="hidden" name="csrfmiddlewaretoken" value="{{csrf_token_value}}"></div>
    <div class="row mt-10">
        <div class="col-sm-3 col-md-3">Institute</div>
        <div class="col-sm-9 col-md-9" data-role="input" data-editable=""><input class="pro-input js_institute" type="text" name="institute{{forloop.counter0}}" value="{{education.institute}}"></div>
    </div>
    <div class="row mt-10">
        <div class="col-sm-3 col-md-3">Degree</div>
        <div class="col-sm-9 col-md-9" data-role="mobile" data-editable=""><input class="pro-input js_degree" type="text" name="degree{{forloop.counter0}}" value="{{education.degree}}"></div>
    </div>
    <div class="row mt-10 save-event">
        <div class="col-sm-9 col-md-9 col-sm-push-3 col-md-push-3">
            <button id="save_edit_education{{forloop.counter0}}" class="btn btn-primary" data-idx="{{forloop.counter0}}" type="submit">Save</button>
            <a id="cancel_edit_education{{forloop.counter0}}" data-idx="{{forloop.counter0}}" class="btn js_cancel_edit_education">Cancel</a>
        </div>
    </div>
</form>
{% endfor %}