字符串String 算法题

1 字符判重 isUniqueChar(string str) 要求:输入字符串,判断该串是否不含有重复字符

需要确认问题:encoding是UTF-8还是ASCII码?
思路:使用hashtable记录字符出现情况;如果已经存在,就说明有重复;
如果是ASCII,使用256位数组即可;

UTF8(万国码)编码的解释:http://baike.baidu.com/item/UTF-8/481798?fromtitle=UTF8&fromid=772139&fr=aladdin

public static bool IsUniqueChar(string str)
        {
            if (string.IsNullOrEmpty(str))
                return true;
            Dictionary<int,bool> charSet = new Dictionary<int,bool>();
            char[] charArr = str.ToCharArray();
            for (int i = 0; i < charArr.Length; i++)
            {
                int tmpInt = (int)charArr[i];
                if (charSet.ContainsKey(tmpInt)&&charSet[tmpInt] == true)
                    return false;
                charSet.Add(tmpInt,true);
            }
            return true;
        }

—————————————————————————————————————–

产生括号|| Generate Parentheses

原题:
https://leetcode.com/problems/generate-parentheses/
要求:产生所有N对合理的括号组合;
举例:
N=3时,输出: ()()(), ()(()),(())(),((()))
思路:递归产生合理括号;
1 需要使用3各变量:当前位置;左括号剩余量;右括号剩余量;
2 边界条件:左括号剩余量<0, 右括号剩余量<1; 不合法括号->return
3 如果没有左右括号可以使用->把当前结果作为合理括号组合打出;
4 如果左括号还有剩余->当前位置插入左括号,递归调用函数填充下一个位置;
5 如果右括号剩余量大于左括号 -> 当前位置插入右括号,递归调用填充函数下一个位置;
注意事项:每次递归完成后会进入下一级的


《字符串String 算法题》

public static List<string> GenerateParentheis(int n)
 {
          List<string> result = new List<string>();
          if (n <= 0)
          return result;


          Helper(n, n, string.Empty, result);


          return result;
 }




  /// <summary>
  /// 递归,不断充实result
  /// </summary>
  /// <param name="left">左括号个数</param>
  /// <param name="right">右括号个数</param>
  /// <param name="curPair">当前括号pair</param>
  /// <param name="result">最终result</param>
  private static void Helper(int left, int right, string curPair, List<string> result)
  {
          if (left == 0 && right == 0)//凑成1个pair了
          {
                    result.Add(curPair);
                    return;
          }
          if (left > 0)//左括号剩余
          {
                    Helper(left - 1, right, curPair + "(", result);
          }
          if (right > 0&& left<right)//右括号剩余
          {
                    Helper(left, right - 1, curPair + ")", result);
          }
 }

———————————————————-
3  字符串转十进制数



原题:
https://leetcode.com/problems/string-to-integer-atoi/
实现atoi函数,字符串转为十进制整数
需要确认的问题:
1 字符串可以是任意字符么?如果是,怎么办?
答:是,忽略非数字字符;
2 int长度是32?答:



考点:
1 判断正负数
2 判断是否溢出
3 核心数学思路: x=x*10 + x.nextChar – ‘0’; (x为指针当前指向的char)

public static int Atoi(string str)
{
           if (string.IsNullOrEmpty(str) || str.Length == 0)
                     return 0;


             bool isNeg = false;


             //清除空格
             str = str.Trim();


             char[] charArr = str.ToCharArray();
             int pos = 0;


             // 预处理符号位
             if (charArr[pos] == '-')
             {
                        isNeg = true;
                        pos++;
             }
             if (charArr[pos] == '+')
             {
                        isNeg = false;
                        pos++;
            }


             //字符串转换为整数
             char c;
             Int64 num = 0;
             while (pos < charArr.Length)
             {
                       c = charArr[pos];
                       if (char.IsDigit(c))
                       {
                                   //处理前后都需要进行溢出验证;
                                   if (num > Int32.MaxValue || num < Int32.MinValue)
                                   return (isNeg) ? Int32.MinValue : Int32.MaxValue;


                                   num = num * 10 + c - '0';




                                   if (num > Int32.MaxValue || num < Int32.MinValue)
                                              return (isNeg) ? Int32.MinValue : Int32.MaxValue;
                        }
                        pos++;
             }
             return (isNeg) ? -(int)num : (int)num;
  } 

————————————–

5  正则匹配(难度:hard)
要求:实现函数 IsMatch(string s, string p); s为字符串,p为匹配模式。该函数支持’.’和’*’正则匹配,
‘.’表示单个字符,
‘*’表示0或多个前一个字符

举例: isMatch(“a”,”a”)->true isMatch(“aa”,”a”)->false isMatch(“a”,”aa”)->false isMatch(“aa”,”a*”)->true
isMatch(“ab”,”.*”)->true
isMatch(“ab”,”abc”)->true

思路: 双指针si, pi记录当前匹配位置。 代码:  《进军硅谷》p163




    原文作者:LeaderTech_NJ
    原文地址: https://blog.csdn.net/fanrong1985/article/details/54133279
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞