C++語言演算法之求任意兩個相同字元的最大距離
提問
我們有一個這樣的字串abcaffdffqwwwwrcs,最大長度的多少呢?我們發現兩個c直接的距離最大,這裡最大長度應該是第2個c的位置-第一個c的位置。
演算法思路
下面來講一下演算法是實現思路:
先來看看,我們如何求第一個字母a之間的距離,我們先確定a的位置是第一個,我們用一個變數儲存a的位置,然後再通過下標移動到底2個a的位置,只需要將第二個位置減去第一個位置即可,這就得到了兩個字母之間的距離。
那麼問題來了,我們一個字串有這麼的多字元,那麼我們如何存放每個字元的位置。這裡只需要將每個字元的位置記錄在一個陣列中,用字元的ascii碼作為陣列的下標,然後通過這個下標來訪問,直接記錄或者讀取陣列記錄的位置。
這時候我們每個字元的位置都能記錄,但是這個時候,如何求任何兩個字元直接的距離,我們需要一個變數來記錄最大距離,通過任何兩個字元之間的距離與這個變數比較,如果遇到更遠的,就記錄在這個變數中,直達整個字串都讀取一遍。
演算法實現
//C++實現方法
public:
static int lengthOfLongestSubstring(String s){
vector<int> dict(256,-1);
int maxLen = 0,start = -1;
for(int i = 0;i<s.length();i++){
if(dict[s[i]] > -1){
start = dict[s[i]];
maxLen = max(maxLen,i-start)'
}
dict[s[i]] = i;
}
return max;
}
//C語言實現方法
int lengthOfLongestSubstring(const char * str) {
int dict[256];
int i = 0;
for (; i<256; i++) {
dict[i] = -1;
}
int maxLen = 0;
for (i = 0; i < strlen(str); i++) {
if (dict[str[i]]>-1) {
maxLen = max(maxLen, i - dict[str[i]]);
}
dict[str[i]] = i;
}
return maxLen;
}
相關文章
- Java二叉樹排序及任意兩點個節點間的最大距離Java二叉樹排序
- 求兩向量距離的CUDA實現
- 求二叉樹的給定兩個結點之間的距離二叉樹
- C語言:使用函式計算兩點間的距離C語言函式
- 【谷歌面試題】求陣列中兩個元素的最小距離谷歌面試題陣列
- 輸入兩個長度相同的字串,比較兩個數在相同位置的字元是否相同字串字元
- 實現一個函式,對給定平面任意兩點座標(x 1 ,y 1 )和(x 2 ,y 2 ),求這兩點之間的距離函式
- 利用空間資料庫求兩點距離資料庫
- 二叉樹任意兩個節點間的最大距離(Java,LeetCode 543二叉樹的直徑 遞迴)二叉樹JavaLeetCode遞迴
- sql 計算兩個經緯度點之間的距離SQL
- 【c語言】求兩個數中不同的位的個數C語言
- 求矩陣中向量兩兩間的歐氏距離(python實現)矩陣Python
- 【c語言】不用大與小與號,求兩數最大值C語言
- 計算地圖中兩點之間的距離地圖
- C語言/C++程式設計學習:和QT零距離接觸的意義C語言C++程式設計QT
- 編輯距離及編輯距離演算法演算法
- 二叉樹中相距最遠的兩個節點之間的距離二叉樹
- C語言(C++語言)中##(兩個井號)和#(一個井號)用法[轉]C語言C++
- c/c++ c語言字元與字串C++C語言字元字串
- 演算法設計與分析:求兩個自然數的最大公約數演算法
- 2058. 找出臨界點之間的最小和最大距離
- 二叉樹中最遠的兩個結點的距離二叉樹
- milvus 使用 l2 歐式距離計算向量的距離,計算出來的距離的最大值是多少?
- 通過sql 計算兩經緯度之間的距離SQL
- 加大段落中2個字元之間的間距字元
- Shell 命令求兩個檔案每行對比的相同內容
- 二叉樹最大距離(直徑)二叉樹
- 編輯距離演算法演算法
- 經緯度計算兩地之間的距離(原理與方法)
- 用一個巨集實現求兩個數中的最大數
- 根據經緯度計算兩點之間的距離的公式公式
- 常見問題01:計算地球上兩個點的距離
- 演算法單連結串列交換任意兩個元素演算法
- 最短編輯距離演算法演算法
- JAVA計算兩經緯度間的距離Java
- c語言遞迴函式實現求最大公約數(Euclid演算法)C語言遞迴函式演算法
- 細學C++之C++語言的特點C++
- leetcode-624.陣列列表中的最大距離LeetCode陣列