想要研究字符串的数据结构和算法,可以先看一遍字符串自带的一些的属性和方法
557.反转字符串中的单词 III
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例:
输入:"Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
提示:
- 在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
思路1:
- 将字符串用空格分隔成数组
- 将数组内的字符串反转
代码1:
var reverseWords = function(s) {
return s.split(' ').map(item => {
return item.split('').reverse().join('')
}).join(' ')
};
思路2:
- 将字符串按每个字符分隔成数组
- 将数组内的字符串反转后再拼接成字符串
- 将拼接成的字符串再按空格分隔成数组
- 然后将数组内的字符串反转后再拼接成字符串
代码2:
var string="Let's take LeetCode contest";
function reverseBySeparator(string, separator) {
return string.split(separator).reverse().join(separator);
}
var reverseEntireSentence = reverseBySeparator(string, "");// "tsetnoc edoCteeL ekat s'teL"
reverseBySeparator(reverseEntireSentence, " ");// "s'teL ekat edoCteeL tsetnoc"
- 统计一个字符串出现最多的字母
思路:
- 统计每个字母出现的次数,存起来
- 然后进行比较
代码:
function maxTimesChar(str) {
if(str.length == 1) {
return str;
}
let charObj = {};
for(let i=0;i<str.length;i++) {
if(!charObj[str.charAt(i)]) {
charObj[str.charAt(i)] = 1;
}else{
charObj[str.charAt(i)] += 1;
}
}
let maxChar = '',
maxValue = 1;
for(var k in charObj) {
if(charObj[k] >= maxValue) {
maxChar = k;
maxValue = charObj[k];
}
}
return maxChar;
}
- 判断一个单词是否是回文
思路:
- 利用reverse 进行字符串反转
- 然后和原字符串对比是否相等
代码:
function isPalindrom(str) {
return str == str.split('').reverse().join('');
}
- 乱序同字母字符串
给定两个字符串,判断是否颠倒字母而成的字符串,譬如Mary与Army就是同字母而顺序颠倒
思路:
- 将两个字符串全部转换成小写或大写字符串
- 然后将每个字符串按每个字符分隔成数组,排序再拼接成字符串
- 最后对比拼接成的字符串是否相等
代码:
var firstWord = "Mary";
var secondWord = "Army";
isAnagram(firstWord, secondWord); // true
function isAnagram(first, second) {
// For case insensitivity, change both words to lowercase.
var a = first.toLowerCase();
var b = second.toLowerCase();
// Sort the strings, and join the resulting array to a string. Compare the results
a = a.split("").sort().join("");
b = b.split("").sort().join("");
return a === b;
}
- 判断大括号是否闭合
思路:
- 循环判断如果是左大括号就放到一个定义的数组中
- 如果是右大括号再接着判断上面定义的数组是否有值
- 如果有值就从尾部把定义的数组移除掉一个值
- 如果没值就直接返回false
- 最后如果定义的数组有值就返回false,否则返回true
代码:
function isBalanced(expression) {
var checkString = expression;
var stack = [];
for (var i = 0; i < checkString.length; i++) {debugger
if(checkString[i] === '{') {
stack.push(checkString[i]);
} else if (checkString[i] === '}') {
// Pop on an empty array is undefined
if (stack.length > 0) {
stack.pop();
}else{
return false;
}
}
}
// If the array is not empty, it is not balanced
if (stack.length) return false;
return true;
}
- 随机生成指定长度的字符串
思路:
- 把所有可能的字符定义成一个字符串
- 循环该指定长度的次数
- 获取所有有可能的字符长度的随机字符
- 把上属获取的随机字符取整
- 然后从所有有可能的字符串中把上属整数位的值取出来
- 最后循环的把第五步取出来的字符加在一起返回
代码:
function randomString(n) {
let str = 'abcdefghijklmnopqrstuvwxyz9876543210';
let tmp = '',
i = 0,
l = str.length;
for (i = 0; i < n; i++) {
tmp += str.charAt(Math.floor(Math.random() * l));
}
return tmp;
}