力扣:判断回文串(JavaScript)

力扣:判断回文串(JavaScript)

题目

判断一个字符串是否是回文串,比如:12321、3443、8338、83438都是回文串。而不是规律的就不是如果12345,abcde。四种解法,附全部源码。

解法一:单层for循环

时间复杂度为:O(n),单层for循环

javascript 复制代码
function demo(i) {
	i=""+i;
	if(i== '0')return true;
	for(let temp=0;temp<i.length;i++){
			if(i[temp]!=i[i.length-1-temp]){return false;}
	}
	return true;
}
let truNum = 12321
let falNum = 1221
let truStr = '1234321'
let falStr = '12345'
console.log(demo(truNum));
console.log(demo(falNum));
console.log(demo(truStr));
console.log(demo(falStr));

首先我们定义一个函数,把传入参数变成字符串,然后使用for循环,判断它的长度为temp和长度为最大长度-temp-1是否相等,如果都相等,则返回true,否则返回false。这种方法主要判断它们里面的内容是否是对称的。

解法二:while循环

时间复杂度:O(n)

javascript 复制代码
function demo(i) {
				i=""+i;
				if(i=='0')return true;
				let small=0;
				let big=i.length-1;
				while(small<big){
					if(i[small]!=i[big]){
						return false;
					}
					small++;big--;
				}
				return true;
			}
			let truNum = 12321
			let falNum = 1221
			let truStr = '1234321'
			let falStr = '12345'
			console.log(demo(truNum));
			console.log(demo(falNum));
			console.log(demo(truStr));
			console.log(demo(falStr));

while 和for循环时间复杂度相同,不同的是while定义了两个变量用于存储最小长度和最大长度。在循环中判断两个字符长度之间的值是否相同,不相同则false,否则最小长度++,最大长度--,直到最小长度不小于最大长度。退出循环返回true

解法三:for+push

时间复杂度:O(2/n)、O(2/n-1)

javascript 复制代码
function demo(i) {
				i = "" + i;
				let arr = [];
				if (i == '0') return true;
				if (i.length % 2 != 0) {
					let j = i.length / 2 - 1
					for (let temp = 0; temp < i.length / 2 - 1; temp++) {
						arr.push(i[temp])
						let h = parseInt(i.length - 1 - temp)
						console.log(arr[temp], i[h]);
						if (arr[temp] != i[h]) {
							return false;
						}
					}
				} else {
					for (let temp = 0; temp < i.length - 1; temp++) {
						let j = i.length / 2
						for (let temp = 0; temp < i.length / 2; temp++) {
							arr.push(i[temp])
							let h = parseInt(i.length - 1 - temp)
							console.log(arr[temp], i[h]);
							if (arr[temp] != i[h]) {
								return false;
							}
						}
					}
				}
				return true;
			}
			let truNum = 12321
			let falNum = 1221
			let truStr = '1234321'
			let falStr = '12345'
			console.log(demo(truNum));
			console.log(demo(falNum));
			console.log(demo(truStr));
			console.log(demo(falStr));

还是for循环,用push 装进一个数组中,然后进行遍历,判断字符长度是否为奇数。进行对应判断。只遍历长度的一半或长度的一半减1,同时字符串如果是0则直接返回true。

解法四:递归

时间复杂度:O(n/2)

javascript 复制代码
function demo(str,min,max) {
				if(min>=max || str == '0') return true;
				if(str[min]!=str[max-1]) return false;
				return demo(str,++min,--max);
			}
			let truNum = 12321
			let falNum = 1221
			let truStr = 'abcba'
			let falStr = '12345'
			console.log(demo(truNum,0,5));
			console.log(demo(falNum,0,4));
			console.log(demo(truStr,0,5));
			console.log(demo(falStr,0,5));

递归实现方式:三个参数,第一个为字符串,第二个为0,也就是最小长度,第三个为字符串长度,如果最小长度>=最大长度或者str为0则返回true,如果最小长度不等于大长度的字符串值返回false,否则返回字符串,最小长度+1,最大长度-1.

相关推荐
YouQian77225 分钟前
2025春训第十九场
算法
CodeJourney.25 分钟前
基于MATLAB的生物量数据拟合模型研究
人工智能·爬虫·算法·matlab·信息可视化
Epiphany.55629 分钟前
素数筛(欧拉筛算法)
c++·算法·图论
爱吃涮毛肚的肥肥(暂时吃不了版)42 分钟前
项目班——0510——JSON网络封装
c++·算法·json
GISer_Jing1 小时前
[前端高频]数组转树、数组扁平化、深拷贝、JSON.stringify&JSON.parse等手撕
前端·javascript·json
liang_20261 小时前
【HT周赛】T3.二维平面 题解(分块:矩形chkmax,求矩形和)
数据结构·笔记·学习·算法·平面·总结
緈福的街口1 小时前
【leetcode】2900. 最长相邻不相等子序列 I
算法·leetcode·职场和发展
易只轻松熊1 小时前
C++(20): 文件输入输出库 —— <fstream>
开发语言·c++·算法
古拉拉明亮之神1 小时前
Spark处理过程-转换算子
javascript·ajax·spark
远瞻。1 小时前
【论文阅读】人脸修复(face restoration ) 不同先验代表算法整理
论文阅读·算法