// 通过LastIndexOf 寻找最后一个值的索引和当前索引是否一致(题目要求最好不使用额外的数据结构)
public bool IsUnique(string astr)
{
for (var i = 0; i < astr.Length - 1; i++)
{
if (astr.LastIndexOf(astr[i]) != i) return false;
}
return true;
}
//或者使用 hashset
var a = new HashSet<char>(str.Length);
foreach (var item in str)
{
if(!a.Add(item))
{
return false;
}
}
return true;
//或者 dictionary 健值对来解决
//把字符串转换为数组,用sort排序后进行比较。
char[] char1 = s1.ToCharArray();
char[] char2 = s2.ToCharArray();
if (char1.Length != char2.Length) {
return false;
}
Array.Sort(char1);
Array.Sort(char2);
for (int i = 0; i < char1.Length; i++) {
if (char1[i] != char2[i]) {
return false;
}
}
return true;
// dictionary 健值对来解决
if(s1.Length!=s2.Length) return false;
Dictionary<char,int> s1Data=new Dictionary<char,int>();
for(var i=0;i<s1.Length;i++){
if(s1Data.ContainsKey(s1[i]))
s1Data[s1[i]]+=1;
else
s1Data[s1[i]]=1;
if(s1Data.ContainsKey(s2[i]))
s1Data[s2[i]]-=1;
else
s1Data[s2[i]]=-1;
}
foreach(var c in s1Data){
if(c.Value!=0) return false;
}
return true;
// 截取已知字符串的“真实”长度length,替换空格
string str = S.Substring(0, length);
str = str.Replace(" ", "%20");
return str;
// 回文串中 字符是奇数 的个数不能大于1.用哈希表保存。
public bool CanPermutePalindrome(string s)
{
char[] strs = s.ToCharArray();
HashSet<char> map = new HashSet<char>();
foreach (char c in s.ToCharArray()) {
if (!map.Add(c)) {
map.Remove(c);
}
}
return map.Count<=1;
}
//根据双指针来判断。一个指针指向first,一个指向second
//判断每个字符是否相等
//一次不相等cnt++,然后判读字符串长度,长的指针+1,相等同时指针+1
//二次不相等cnt=2返回false;
public bool OneEditAway(string first, string second) {
if (Math.Abs(first.Length - second.Length) > 1)
return false;
int i = 0, j = 0, cnt = 0;
while (i < first.Length && j < second.Length)
{
if (first[i] == second[j])
{
i++;
j++;
}
else
{
if (++cnt > 1) return false;
if (first.Length > second.Length)
{
i++;
}
else if (first.Length < second.Length)
{
j++;
}
else
{
i++;
j++;
}
}
}
return true;
}
//根据两个字符串长度是否改变分两种情况,
//1.没改变就判断不同字符的个数是否大于1
//2.判断两个字符串的长度,判断长的能否拼接成短的字符串
int len1 = first.Length;
int len2 = second.Length;
if (len1 != len2)
{
if (len1 > len2)
{
for (int i = 0; i < len1; i++) {
if (first.Substring(0, i) + first.Substring(i + 1) == second) {
return true;
}
}
}
else {
for (int i = 0; i < len2; i++)
{
if (second.Substring(0, i) + second.Substring(i + 1) == first)
{
return true;
}
}
}
return false;
}
else
{
int n = 0;
for (int i = 0; i < len1; i++) {
if (first[i] != second[i]) {
n++;
}
}
if (n > 1) {
return false;
}
}
return true;