解题思路:(C#)
通过把字符串变成数组的形式,用临时变量来存储最大字符串,循环数组,对比临时变量中是否存在数组元素,如果存在,代表重复了,那么就需要删除temp中的重复元素,最后选择最大的不重复字符串。
public class Solution {
public int LengthOfLongestSubstring(string str) {
if (str==null)
{
throw new ArgumentNullException();
}
var arr = str.ToCharArray();//转换成字符数组
var num = new List<int>();//字符串不重复长度数组
var temp = "";//临时数组
for (int i = 0; i < arr.Length; i++)
{
//如果有代表重复了,需要截取
if (temp.IndexOf(arr[i])>-1)
{
num.Add(temp.Length);//增加
temp = temp.Substring(temp.IndexOf(arr[i])+1);
}
temp += arr[i];
}
num.Add(temp.Length);//这个需要添加
return num.Max();
}
}
要点:
- String.Substring()的用法
String.SubString(int index,int length)
index:开始位置,从0开始
length:你要取的子字符串的长度
- 示例:
using System;
using System.Collections.Generic;
using System.Text;
namespace str_sub
{
class Program
{
static void Main(string[] args)
{
string myString = "Hello Word!";
//Substring()在C#中有两个重载函数,分别如下示例
string subString1 = myString.Substring(0);
//如果传入参数为一个长整, 且大于等于0
//则以这个长整的位置为起始
//截取之后余下所有作为字串
//如若传入值小于0
//系统会抛出ArgumentOutOfRange异常
//表明参数范围出界
string subString2 = myString.Substring(0, 5);
//如果传入了两个长整参数
//前一个为参数子串在原串的起始位置
//后一个参数为子串的长度
//如不合条件同样出现上述异常
Console.WriteLine(subString1);
Console.WriteLine(subString2);
Console.ReadLine();
}
}
}
程序输出结果:
Hello Word!
Hello