面试题之:字符串

Posted bala

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题之:字符串相关的知识,希望对你有一定的参考价值。

// 公用 html
<input type="text" id="input" placeholder="请输入" />

<button onclick="set()">button</button>

<div class="result">
      结果:<div id="result"></div>
</div>
// 公用 js
function set(){
  let str = document.getElementById(‘input‘).value
  this.handle(str)
}

// 显示结果于界面中
function showResult(v){
  ...  // 结果处理,此处为了与核心代码分离,所以提取了出来
  let ret = ...  // 处理后得到的结果
  document.getElementById(‘result‘).innerText = ret
}

 

1、统计字符串中每个字符出现的次数

function handle(str) {
    // str :  需要统计的字符串

    let newStr = {}  // 没有重复的数据

    for(let i=0; i< str.length; i++){
        let key = str[i]
        newStr[key] = newStr[key] ? newStr[key]+1 : 1
    }

    let max = 0  // 出现次数最多的值
    for(let j in newStr){ 
        max = newStr[j] > max ? newStr[j] : max
    }

    this.showResult(max)   // 显示结果    
}

 

 2、打印出字符串中出现次数最多的字符

function handle(str){
  // str :  需要统计的字符串

   let newStr = {} // 没有重复的数据

   for(let i=0; i< str.length; i++){
     let key = str[i]
     newStr[key] = newStr[key] ? newStr[key]+1 : 1
   }

   let max = 0  //出现次数最多的值
   let maxArr = [] // 存储次数最多的字符 数组

   for(let j in newStr){
     if(newStr[j] > max) { // 大于最大次数,更新存储数组
       max = newStr[j]
       maxArr = []
       let obj = {
         key: j,
         value: max
          }
          maxArr.push(obj)
       }else if(newStr[j] == max){  // 考虑到可能有最多次数相等的情况
         let obj = {
           key: j,
              value: max
          }
          maxArr.push(obj)
       }
   }
   this.showResult(maxArr)
}

 

3、替换字符串中某一段字符串。

  如将字符串“hello, annil, nice to meet you!  annil,  ahh…”  中的 ‘annil‘ 替换成 ‘anderson’

// 方法一: replace()
function handle(str) {
  let res = str.replace(‘annil‘, ‘anderson‘) // 只会匹配第一个匹配值
  // str.replace(/annil/g, ‘anderson‘)  // 匹配所有
   // str.replace(new RegExp(key, ‘g‘), ‘b‘) //需要替换的字符串是一个变量

  this.showResult(res)      
}

// 方法二: 不采用replace 方法实现  该方法可以看做replace的实现
function handle(str){
   let newStr = str
   let patt = new RegExp(‘annil‘, ‘g‘)   // patt = /annil/g
   let ret // ret = patt.exec(str)    ret = [‘annil‘]
// patt.global = true // 全局正则
while((ret = patt.exec(str)) != null) {   let arr = newStr.split(ret[0]) // arr = [‘hello, ‘, ‘, nice to meet you! ‘, ‘, ahh...‘] newStr = arr.join(‘anderson‘) } this.showResult(newStr) }

知识点:

RegExp对象:表示正则表达式,对字符串执行模式匹配的强大工具。

exec():检索字符串中的正则表达式的匹配。

 

4、找字符串中最长 / 最短的单词

function handle(str){
    let arr = str.split(‘ ‘)

    arr.sort((a, b) => { 
        return b.length - a.length 
        // 返回值为正,后面的数在前面; 为负,前面的数在前面。   sort 在原数组上进行排序,不生成副本
    })

    this.showResult(arr[0])
}

 

5、输入两个字符串,从第一个字符串中删除第二个字符串中的所有字符串。不可以使用replace。

例如:输入“They are students” 和“aeiou”

  则删除之后的第一个字符串变成: “Thy r stdnts”

 

以上是关于面试题之:字符串的主要内容,如果未能解决你的问题,请参考以下文章

面试题之:字符串

多线程面试题之三线程按顺序交替打印ABC的方法

前端面试题之代码输出篇

前端面试题之手写代码篇

面试题之Linux58个面试常问附带答案

js-面试题之字符串