1. [.Netframework4,要求高效]假设两个字符串中所含有的字符和个数都相同我们就叫这两个字符串匹配,比如:abcdaadabc和adabcabcda,由于出现的字符个数都是相同,只是顺序不同,所以这两个字符串是匹配的。写出一个高效的方法。
/// <summary>
/// 判断字符串是否匹配(字符相同,顺序不同)
/// </summary>
/// <param name="first">要比较的字符串</param>
/// <param name="second">要比较的字符串</param>
/// <returns></returns>
public static bool Compare(string first, string second)
{
if (first == null && second == null) { return true; } //两个均为Null
if (first == null || second == null) { return false; } //一个为Null,一个不为Null
if (first == "" && second == "") { return true; } //两个均为空字符串
if (first == "" || second == "") { return false; } //一个为空字符串,一个不为空字符串
if (first.Length != second.Length) { return false; } //字符串长度不同
first = string.Join(string.Empty, first.OrderBy(c => c)); //字符串排序重新组合
second = string.Join(string.Empty, second.OrderBy(c => c)); //字符串排序重新组合
return (first == second);
}
2. [.Netframework4,要求高效]有一个Int数组(数组长度、顺序等不确定),要求计算出数组中两个值相加等于指定值的所有组合,并且组合不能重复,比如int[]{1,2,3,4,5,6,7,8,9},输出相加等于10的组合。
/// <summary>
/// 找出Int数组相加等于指定值的组合
/// </summary>
/// <param name="para">整数数组</param>
/// <param name="SumData">相加后的整数</param>
/// <returns>结果集合[返回组合集合,数组长度为2,相加即为指定值]</returns>
public static List<int[]> FindIntSum(Int32[] para, Int32 SumData)
{
List<int[]> ListResult = new List<int[]>(); //定义结果集合
if (para.Length == 0 || SumData == 0) { return null; } //参数判断
List<Int32> list = para.Distinct().OrderBy(A => A).ToList(); //去除重复项并转化为Int集合
for (int i = 0; i < list.Count; i++)
{
if (list[i] > SumData) { break; }
int temp = SumData - list[i];
if (list[i] >= temp) { break; }
if (list.Contains(temp))
{
ListResult.Add(new int[] { list[i], temp });
}
}
if (ListResult.Count == 0)
{
return null;
}
return ListResult;
}
3. [Web,要求高效]限制文本框输入,要求:(1)只能输入数字,非数字不允许输入;(2)不允许粘贴;(3)不允许拖动文本到文本框;(4)不允许切换输入法。
<!-- 不能输入非输入数字/不能粘贴/不能切换输入法/不能拖动内容进来 -->
<input type="text" οnpaste="return false;" οndragenter="return false;" Style="ime-mode: Disabled;" οnkeypress="return event.keyCode>=48&&event.keyCode<=57;" />