leetcode C#刷题1

面试题 01.01. 判定字符是否唯一

// 通过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(str.Length);
            foreach (var item in str)
            {
               if(!a.Add(item))
                {
                    return false;
                }
            }
            return true;
//或者  dictionary 健值对来解决

面试题 01.02. 判定是否互为字符重排

//把字符串转换为数组,用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 s1Data=new Dictionary();
        for(var i=0;i

面试题 01.03. URL化

// 截取已知字符串的“真实”长度length,替换空格
string str = S.Substring(0, length);
            str = str.Replace(" ", "%20");
            return str;

面试题 01.04. 回文排列

// 回文串中 字符是奇数 的个数不能大于1.用哈希表保存。
  public bool CanPermutePalindrome(string s)
        {
            char[] strs = s.ToCharArray();
            HashSet map = new HashSet();
            foreach (char c in s.ToCharArray()) {
                if (!map.Add(c)) {
                    map.Remove(c);
                }
            }
            return map.Count<=1;
        }

面试题 01.05. 一次编辑

//根据双指针来判断。一个指针指向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;

你可能感兴趣的:(leetcode C#刷题1)