无重复字符的最长子串

以滑动窗口的方式来寻找子串, 左指针在遇到重复元素时更新, 右指针即遍历指针i. 时间复杂度 O ( n ) O(n) O(n)

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        length = l = r = 0
        while r<len(s):
            if s[r] not in s[l:r]:
                r += 1
                length = max(length, r-l)
            else:
                l += 1
        return length   

用python做算法实现,效率不高,但是很好理解。


替换空格

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

class Solution {
public:
	void replaceSpace(char *str,int length) {
        // 返回类型 void 说明不能开辟内存,只能在原来内存上修改
        // 避免覆盖,只能逆序遍历
        // 统计空格个数
        int cnt=0;
        for(int i=0; i<length; ++i){
            if(str[i] == ' ') cnt++;
        }
        if(cnt==0) return; // 没有空格
        // 逆序遍历
        int i(length), j(length+2*cnt); // 字符串结尾为终止符'\0'
        for(i; i>=0; --i){
            if(str[i] == ' '){
                str[j--] = '0';
                str[j--] = '2';
                str[j--] = '%';
            }
            else{
                str[j--] = str[i];
            }
        }
	}
};