LeetCode #3 Longest Substring Without Repeating Characters

问题描述

    Given a string, find the length of the longest substring without repeating characters.

Examples:

    Given "abcabcbb", the answer is "abc", which the length is 3.

    Given "bbbbb", the answer is "b", with the length of 1.

    Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring"pwke" is a subsequence and not a substring.

分析

    寻找没有重复字符的最长子串。基本思路是从第一个字符s[0]开始找,将遇到的所有与前面都不重复的字符存放到一个临时的子串temp_string中,直到遇到一个与temp_string中某个字符相同的字符为止,将当前的temp_string与存储的最大字符串进行比较,如果比之长,则替换,没有则丢弃。之后将把i的值更新为上面temp_string中找到的那个重复的字符在源字符串中的位置-1。再继续进行迭代寻找,直到遍历到字符串的最有一位。这样在最长字符串中存储的字符串就是最长字符串,其长度就是最长字符串的长度。

 

代码

class Solution 
{
public:
	int lengthOfLongestSubstring(string s) 
	{
		int max_length = 0;
		string max_substring;
		string temp_max_substring;

		for (int i = 0; i < s.length(); i++)
		{
			for (int j = i; j < s.length(); j++)
			{
				// 如果存储的字串里面已经有这个字符了,则将目前存储的字串与最长子串进行比较,存储最长者.然后再从i+1继续查找
				size_t position = temp_max_substring.find(s[j]);
				if (position != string::npos )
				{
					// 如果当前存储的长度比之前的最大长度大,则替换之
					if (max_length < temp_max_substring.length() )
					{
						max_substring = temp_max_substring;
						max_length = temp_max_substring.length();
					}
					i = int(position);
					temp_max_substring = "";
					break;
				}
				else                                  // 如果没有,则将其加入map,并更新临时最长子串
				{
					temp_max_substring += s[j];
				}
			}
		}
		if (max_length < temp_max_substring.length())
		{
			max_substring = temp_max_substring;
			max_length = temp_max_substring.length();
		}

		return max_length;
	}
};

 

转载于:https://my.oschina.net/yangkunxing/blog/879574

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值