用创建一个新变量的方法也可以实现,不过空间复杂度会变成n
采用依次从第一个比最后一个进行比较的方法,虽然时间复杂度一样都是0(n),但空间复杂度是1
另外,比较过程中如果有false,就直接break,可以省去后面判断流程
用创建一个新变量的方法也可以实现,不过空间复杂度会变成n
采用依次从第一个比最后一个进行比较的方法,虽然时间复杂度一样都是0(n),但空间复杂度是1
另外,比较过程中如果有false,就直接break,可以省去后面判断流程
//判断是否是回文串
//level
//noon
string str = Console.ReadLine();
bool isRight = true;
for (int i = 0; i < str.Length/2; i++)
{
if(str[i]!=str[str.Length-1 - i])
{
isRight = false;
break;
}
}
if (isRight)
{
Console.WriteLine("是回文串");
}
else
{
Console.WriteLine("不是回文串");
}
Console.ReadKey();
string str = Console.ReadLine();
string[] strArray = str.Split(' '); //去掉空格
int[] intArray = new int[strArray.Length]; //创建整数数组 长度跟去掉空格的数组一致
for (int i = 0; i < strArray.Length; i++) //遍历数组
{
int num = Convert.ToInt32(strArray[i]); //将字符数字转换成整数类型
intArray[i] = num; //存储整数到数组
}
//得到有序的数组
int max = 1; //最多连续天数
int m = 1; //连续天数
for (int i=0;i<intArray .Length-1;i++)
{
if (intArray[i] < intArray[i + 1]) //连续
{
m ++; //连续天数+1
}
else //连续天数中断
{
if (m > max) //判断是否是最长的连续天数
{
max = m; //保存最多连续天数
}
m = 1; //连续天数回退到1天 重新计算
}
}
//for循环结束后 最后一轮连续天数没有更新,需要再补充一轮比较
if (m > max) //断是否是最长的连续天数
{
max = m; //保存最多连续天数
}
Console.WriteLine(max);
Console.ReadKey();
string str = Console.ReadLine();
string[] strArray = str.Split("");
int[] intArray = new int[strArray.Length];
for (int i =0; i < strArray.Length; i++){
int number = Convert.ToInt32(strArray[i]);
intArray[i]= number;
}
int maxdays = 0;//记录最高气温连续升高的天数
int count =1;//记录气温连续升高的天数
for(int i= 0;i<intArray.length-1;i++)
{
if(intArray[i]<intArray[i+1])
{
count++;
}
else
{
if (count > maxdays)
{
maxdays = count;
}
count = 1;
}
}
if (count > maxdays)
{
maxdays = count;
}
第九十四课 编程题-回文串-最长连续天数
1.“回文串”是一个正读和反读都一样的字符串,比如“level”“noon”等就是“回文串”。请写程序判断读入的字符串是否是“回文串”。
string a = Console.ReadLine();
bool temp = false;
for(int i = 0; i < a.Length / 2; i++)
{
if (a[i] == a[a.Length - 1 - i])
{
temp = true;
}
else
{
temp = false;
break;
}
}
if (temp==false)
{
Console.Write("不是回文串");
}
else
{
Console.Write("是回文串。");
}
这里注意a[i]与a.Length的关系,前者是从0开始计算,后面是从1开始计算,所以两者条件要统一才可以比较并用于判断。
当字符串为偶数是不用解释了,头与尾一对一的比较。
当字符串为奇数时,中间的数字自然不用比较了,用循环次数限制一下即可,因为整数除以2时只保留整数位的,所以a.Length/2是整数。
2. 最近夏日炎热,令张三非常不爽。张三开始研究天气的变化,历经千辛万苦,他收集了连续N(1<N<1000000)天的最高气温数据。
现在他想知道气温一直上升的最长连续天数。
样例输入: 1352357839 样例输出:5
string str = Console.ReadLine();
string[] strArray = str.Split(" ");
int[] intArray = new int[strArray.Length];
for (int i = 0; i < strArray.Length; i++)
{
int number = Convert.ToInt32(strArray[i]);
intArray[i] = number;
}
int count = 1;
int maxDays = 0;
for (int i = 0; i < intArray.Length - 1; i++)
{
if (intArray[i] < intArray[i + 1])
{
count++;
}
else
{
if (count > maxDays)
{
maxDays = count;
}
count = 1;
}
}
if (count > maxDays)
{
maxDays = count;
}
Console.WriteLine("气温连续升高的最长天数为:" + maxDays + "天");
注解:
for (int i = 0; i < intArray.Length - 1; i++)
样例中数字个数为10,这里表示0到8,所以循环为9次(0-8月1-9是一样的)
if (intArray[i] < intArray[i + 1])
前面的数字小于后面的数字,语句为true,只有在语句为false时,也就是前面的数字大于后面的数字时,语句才会跳转到else下的if语句中( if (count > maxDays))执行判断来完成记录的比较次数,这里的count初始数值为1. 当intArray[8] < intArray[9]时,语句执行循环到了尽头,而语句执行也停止在了count++此时count的值为2,此时程序向下继续执行 if (count > maxDays),但这是if语句判断条件为false所以maxDays的值保持上次结果并输出。
判断是否是回文字符串
string str=Console.WriteLine();
bool isHui=true;
for ( int i = 0 ; i < str.Length / 2 ; i++ )
{
if ( str [ i ] != str [ str.Length - 1 - i ]);
{
isHui=falue;
break;
}
}