1. 程式人生 > >尋找最長重複子串——Python

尋找最長重複子串——Python

題目描述:

給定一個字串,找出其中最長重複字串,以元組形式返回結果。例如,給定“aaaabb”,最長重複子串為“aaaa”,返回結果為('a',4)。

解題思路:

將字串中每個字元向後的重複次數列出,其中的最大值即為最長重複串的長度,對應的字元即為重複字元。例如:

a a a a b b

4 3 2 1 2 1

最大值為4,對應的字元為"a"

程式碼實現:

def longest_repetition(chars):
    if len(chars) == 0 or len(chars) == 1:
        return (chars,len(chars))
    result = [1]*len(chars)
    for left in xrange(len(chars)-1):
        for right in xrange(left+1, len(chars)):
            if chars[left] == chars[right]:
                result[left] += 1  
            else:
                break
    return (chars[result.index(max(result))], max(result))

# 測試用例
print longest_repetition("aaaabb")
print longest_repetition("cbdeuuu900")
print longest_repetition("")
print longest_repetition('ba')
print longest_repetition("bbbaaabaaaa")
print longest_repetition("abbbbb")
print longest_repetition("aabb")
print longest_repetition("a")

相關推薦

尋找重複——Python

題目描述: 給定一個字串,找出其中最長重複字串,以元組形式返回結果。例如,給定“aaaabb”,最長重複子串為“aaaa”,返回結果為('a',4)。 解題思路: 將字串中每個字元向後的重複次數列出,其中的最大值即為最長重複串的長度,對應的字元即為重複字元。例如:

尋找一個字串中的重複(字尾陣列)&找出一個字串中重複

一、尋找一個字串中的最長重複子串(字尾陣列) 字尾陣列其實可以看尋找一個字串中的最長重複子串(字尾陣列)作一個由字串s倒數i個字元組成的子串的集合,其中0<i<s.length(),例如 字串strstr的字尾陣列為: {r,tr,str,rstr,trstr,

程式設計珠璣: 15章 字串 15.2尋找字串中的重複 -------解題總結

#include <iostream> #include <stdio.h> #include <sstream> #include <stdlib.h>//qsort using namespace std; /* 問題:

字尾陣列求重複

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

資料結構/重複

基本方法、KMP演算法求解、字尾陣列求解 求字串的最長重複子串 例如:aaaaaaaaabbbbcccaaassscvvv這裡面的最長重複子串為aaaaaaaaa 演算法思路:演算法時間複雜度(O(n)) 1. 將這一個字串先轉成char陣列; 2. 將這一char陣列進行遍歷

資料結構——求一個中出現的第一個重複

求一個串中出現的第一個最長重複子串。 輸入串:36123459836121234569 求最長重複子串: 原串:36123459836121234569 最長重複子串:12345 關於這個問題有KMP優化,暫時還沒掌握 下面這個演算法在輸入輸出方面還有待優化 #include <

重複重複 思路

題目: 求任意一個字串中的所有最長重複字串和所有最長不重複子串 最長不重複子串的解法:        設定一個輔助資料結構(如map)記錄每個字元最後一次出現的位置;遍歷字串中的每個字元,如果在map

求字串的重複

int pstrcmp(const void* p,const void* q) { //qsort要用到,按字典序對子字串排序 return strcmp(*(char**)p,*(char**)q); } int comlen(char* p,char* q) {

找出字串的重複

一個長度為10000的字串,寫一個演算法,找出最長的重複子串,如abczzacbca,結果是bc。 提示:此題是字尾樹/陣列的典型應用,即是求字尾陣列的height[]的最大值。 #include

字串的重複

#if 1 #include <iostream> #include <stdlib.h> using namespace std; int pstrcmp(const

求一個字串當中的重複

#include<stdio.h> #include<string.h> /* 最長重複子串 Longest Repeat Substring */ int maxlen; /* 記錄最長重複子串長度 */ int maxindex;

求字串的重複(java)

  -暴力法    兩個指標實現,複雜度O(n^2) package test; import java.util.Scanner; public class Main2 { public static String maxRepat(String str)

的定順序儲存結構:求s中出現的第一個重複及其位置

 假設以定長順序儲存結構表示串,試設計一個演算法,求串s中出現的第一個最長重複子串及其位置。 定長順序串SString的型別定義:typedef unsigned char SString[MAXSTRLEN+1]; /* s[0] is the string's le

LCP poj 2217 尋找公共

題目:http://poj.org/problem?id=2217 首先解釋,DP中的最長公共子序列和此處的最長公共子串區別-------------------序列可以是不連續的,但是子串是連續的 其次,LCP,lcp[i]就是lcp[rank[i]]和lcp[rank[

求給定字串中重複

問題描述: 給定一個字串,如abcdaaabbbaaaabcdbbb,這個串中最長重複子串為abcd;若有多個長度相等的重複子串,只需輸入第一個最長的。 最直觀的演算法設計: 設給定的字串為s=“a1a2a3...an”,則對任意ai,在i+1到n之間查詢aj, s.t.

重複問題

最長重複子串是指在一個字串中找出最長的出現兩次或兩次以上的子串,例如abcdeabbcde,則bcde則是最長的重複子串。 最直觀的解法是窮舉所有的子串,和原串進行對比,從而選出最長的重複子串。 #include <stdio.h> #include <s

重複(可重疊)

首先這是一個單字串問題。子字串R 在字串L 中至少出現兩次,則稱R 是L 的重複子串。重複子串又分為可重疊重複子串和不可重疊重複子串,這裡只是簡單討論最長可重疊的重複子串.首先,最直接的方法就是子串和子串間相互比較,這樣檢視所有的子串對,時間複雜度為O(n^2)。最快的方

求字串的重複——Java實現

要求:求一個字串的最長重複子串 思路:使用兩個指標,兩個指標的間隔從1,2,3...依次增大, 同時向右移動兩個指標,在移動的過程中判斷指標位置的字元是否相同,並記錄最長子串的長度。 Java程式碼: public class Solution { // 求解字串中的

求一個中出現的第一個重複

/*exp4-5.cpp*/#include<stdio.h> #include<string.h> #include<malloc.h> #define MaxSize 100 typedef struct {  char ch[Max

python字串面試題:找出一個字串中第一個字母和最後一個字元是第一次重複,中間沒有重複

1.給出任意一個字串,列印一個最長子串字串及其長度,如果有相同長度的子字串,都要一起打印出來,該子字串滿足以下條件, 第一個字母和最後一個字元是第一次重複 這個子字串的中間字母沒有重複 這個子字串是滿足條件裡面的最長的 如: adsasadmasd 中滿足條件的是dmasd   im